在 Node.js 中,可以使用多種方式來發起 HTTP 請求。以下是一些使用內建的 http 模組以及流行的第三方庫 axios 發起 HTTP 請求的例子。
使用 http 模組發起 GET 請求
Node.js 的 http 模組允許你發起 GET 請求。以下是一個簡單的例子:
const http = require('http'); const options = { hostname: 'www.baidu.com', port: 80, path: '/', method: 'GET' }; const req = http.request(options, (res) = >{ console.log(`狀態碼: $ { res.statusCode }`); console.log(`響應頭: $ { JSON.stringify(res.headers) }`); res.setEncoding('utf8'); res.on('data', (chunk) = >{ console.log(`響應主體: $ { chunk }`); }); res.on('end', () = >{ console.log('響應中已無資料。'); }); }); req.on('error', (e) = >{ console.error(`請求遇到問題: $ { e.message }`); }); req.end();
使用 http 模組發起 POST 請求
當需要傳送資料到伺服器時,你可能需要使用 POST 請求。以下是如何使用 http 模組發起 POST 請求的例子:
const https = require("https"); // 使用https模組 const data = JSON.stringify({ id: 10, name: "rick", city: "bj", }); const options = { hostname: "localhost", // 不包含協議部分 port: 7144, // 使用HTTPS的埠 path: "/api/User/Add", method: "POST", headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(data), // 使用BufferbyteLength計算長度 }, . // 可選:如果使用自簽名證書,可以新增以下選項忽略證書驗證(不推薦在生產環境中) rejectUnauthorized: false, }; const req = https.request(options, (res) => { console.log(`狀態碼: ${res.statusCode}`); res.setEncoding("utf8"); res.on("data", (chunk) => { console.log(`響應主體: ${chunk}`); }); res.on("end", () => { console.log("響應中已無資料。"); }); }); req.on("error", (e) => { console.error(`請求遇到問題: ${e.message}`); }); req.write(data); req.end();
使用 axios 庫發起 GET 請求
axios 是一個基於 Promise 的 HTTP 客戶端,適用於 node.js 和瀏覽器。它是執行 HTTP 請求的流行選擇。以下是如何使用 axios 發起 GET 請求的例子:
const axios = require('axios'); // 建立一個忽略自簽名證書驗證的 Axios 例項 const instance = axios.create({ baseURL: 'https://localhost:7144', httpsAgent: new(require('https') .Agent)({ rejectUnauthorized: false }) }); instance.get('/api/User/Detail?id=1') .then((response) => { console.log(`狀態碼: ${response.status}`); console.log(`響應主體: ${response.data}`); }) .catch((error) => { console.error(`請求遇到問題: ${error.message}`); });
注意:需要單獨安裝axios
npm install axios --save
使用 axios 庫發起 POST 請求
使用 axios 發起 POST 請求同樣簡單。以下是一個例子:
const axios = require("axios"); const todo = { id: 20, name: "rick", city: "sh", }; // 建立一個忽略自簽名證書驗證的 Axios 例項 const instance = axios.create({ baseURL: 'https://localhost:7144', httpsAgent: new(require('https') .Agent)({ rejectUnauthorized: false }) }); instance.post("/api/User/Save", todo) .then((response) => { console.log(`狀態碼: ${response.status}`); console.log(`響應主體: ${response.data}`); }) .catch((error) => { console.error(`請求遇到問題: ${error.message}`); });
在上述例子中,我們使用 axios 庫傳送了一個 JSON 物件,並在響應中列印狀態碼和響應資料。
結論
在 Node.js 中,你可以使用內建的 http 模組或者第三方庫如 axios 來發起 HTTP 請求。內建模組提供了更多的控制和靈活性,而 axios 等庫提供了簡潔的 API 和 Promise 支援,使得非同步 HTTP 請求變得更加容易。選擇哪種方法取決於你的具體需求和個人喜好。