在 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 请求变得更加容易。选择哪种方法取决于你的具体需求和个人喜好。