当前位置: 首页 > 面试题库 >

Node.js Express中的HTTP GET请求

弘思聪
2023-03-14
问题内容

如何在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(线性,无回调),promise,编译时支持和智能感知,我们创建了一个符合该要求的轻量级HTTP和REST客户端:



 类似资料:
  • 向传递的 URL 发出一个 GET 请求。 使用 XMLHttpRequest web API 向给定的 url 发出 get 请求。 通过调用给定的 callback 和 responseText 来处理 onload 事件。 通过运行提供的 err 函数,处理onerror事件。 省略第四个参数 err ,默认将错误记录到控制台的 error 流。 const httpGet = (url,

  • 问题内容: 我正在使用以下代码从Web服务器请求xml: 当我调用httpclient.execute(httpget,responseHandler)时,我得到一个clientProtocolException。该URL在Web浏览器中工作正常,它返回xml,然后浏览器显示它。 有什么想法为什么我会得到一个clientProtocolException而浏览器却能很好地处理它? 编辑1: 查看协

  • 我想像下面这样嵌套资源。 但我不能得到请求。团队中的params[“dashboard_id”]参数,因为它似乎已被参数值替换。我试图通过调用一个中间函数来传递问题,并将参数传递到某个地方,但我不知道在哪里…你有答案吗?谢谢,佛朗哥

  • 我正在尝试从远程服务器获取响应。下面是我的代码: 在行中出现以下异常: IllegalStateException:目标主机不能为空,或在参数中设置。scheme=null,host=null,path=http://www.pappico.ru/promo.php?action=registerUser&params={“userid”:1,“username”:“ithsoftsuve+...

  • 我的android应用程序一直在崩溃。我正在尝试通过电话后连接到网络服务。但是我的应用程序每次尝试调用网络服务时都会崩溃。

  • 我试图使用Apache HTTPClient执行一个简单的get请求,但是看起来好像所有的代码在HTTP响应=client.execute(get);被跳过。我无法访问响应对象的内容,它们都是空的。然而,当我使用调试模式,我探索的对象,我看到所有的数据。这个函数被包装在一个异步任务中,所以我想知道任务本身是否在等待它被执行或者我不确定的事情。 这里也发生了类似的事情:httpclient之后的An

  • 我只是复制了的所有jar文件,但是不能导入所有这些jar文件,它给出一个错误:。