如何从 Node.js 或 Express.js 中发出 HTTP 请求?我需要连接到另一个服务。我希望调用是异步的,并且回调包含远程服务器的响应。
这是我的示例中的一些代码片段。它是异步的并返回一个 JSON 对象。它可以做任何形式的 GET 请求。
请注意,有更优化的方法(只是一个示例) - 例如,不是将您放入数组中的块连接起来并加入它等等......希望它能让您朝着正确的方向开始:
const http = require('http'); const https = require('https'); /** * getJSON: RESTful GET request returning JSON object(s) * @param options: http options object * @param callback: callback to pass the results JSON object(s) back */ module.exports.getJSON = (options, onResult) => { console.log('rest::getJSON'); const port = options.port == 443 ? https : http; let output = ''; const req = port.request(options, (res) => { console.log(`${options.host} : ${res.statusCode}`); res.setEncoding('utf8'); res.on('data', (chunk) => { output += chunk; }); res.on('end', () => { let obj = JSON.parse(output); onResult(res.statusCode, obj); }); }); req.on('error', (err) => { // res.send('error: ' + err.message); }); req.end(); };
它通过创建一个选项对象来调用,例如:
const options = { host: 'somesite.com', port: 443, path: '/some/path', method: 'GET', headers: { 'Content-Type': 'application/json' } };
并提供回调函数。
例如,在一个服务中,我需要上面的 REST 模块,然后执行以下操作:
rest.getJSON(options, (statusCode, result) => { // I could work with the resulting HTML/JSON here. I could also just return it console.log(`onResult: (${statusCode})\n\n${JSON.stringify(result)}`); res.statusCode = statusCode; res.send(result); });
如果您正在寻找async/ await(线性,无回调)、承诺、编译时支持和智能感知,我们创建了一个轻量级的 HTTP 和 REST 客户端来满足该要求:
async
await
Microsoft 类型化休息客户端