Javascript 如何在sailsjs(nodejsmvc)中使用外部restapi

Javascript 如何在sailsjs(nodejsmvc)中使用外部restapi,javascript,node.js,rest,real-time,sails.js,Javascript,Node.js,Rest,Real Time,Sails.js,我使用sailsjs作为node js的MVC,我还在学习它。 我设法从自己的数据库中获取数据并使用它 但是现在我需要/想要从外部RESTAPI获取数据。 我在控制器中使用了这个: // api/controllers/SomeController.js test : function(res,req){ var j; var https = require('https'); var options = { hostname: 'testing.atla

我使用sailsjs作为node js的MVC,我还在学习它。 我设法从自己的数据库中获取数据并使用它

但是现在我需要/想要从外部RESTAPI获取数据。 我在控制器中使用了这个:

// api/controllers/SomeController.js
test : function(res,req){
    var j;

    var https = require('https');

    var options = {
      hostname: 'testing.atlassian.net',
      port: 443,
      path: '/rest/api/2/search?jql=project=ABC',
      method: 'GET',
      headers: {'Authorization': 'Basic ' + 'SuperSecretLoginAndPassword'}
    };

    var req = https.request(options, function(res) {
      res.setEncoding('utf8');
      res.on('data', function(d) {

      });
     });

    req.end();
}
变量
d
显示正确的结果。 如何在视图中使用请求结果? 我已经搜索了很多,但我找不到任何方法在我的视图中显示这一点

这会实时更新吗?因此,如果de rest api中的某些内容发生更改,我就不必刷新


如果这是愚蠢的事情,很抱歉。

基本上,您需要等待您的请求启动回调,然后将获取的数据馈送到
res.locals
。假设您正在获取JSON数据,可以执行以下操作:

// api/controllers/SomeController.js
test: function(req, res) {
  var https = require('https');

  ...

  https.request(options, function(response) {
    var responseData = '';
    response.setEncoding('utf8');

    response.on('data', function(chunk){
      responseData += chunk;
    });

    response.once('error', function(err){
      // Some error handling here, e.g.:
      res.serverError(err);
    });

    response.on('end', function(){
      try {
        // response available as `responseData` in `yourview`
        res.locals.requestData = JSON.parse(responseData);
      } catch (e) {
        sails.log.warn('Could not parse response from options.hostname: ' + e);
      }

      res.view('yourview');
    });
  }).end();

}
您提供的示例代码有一些问题:

  • test:function(res,req).
    不要混淆控制器参数,第一个是_req _uest,第二个是_res _ponse

  • var req=https.request…
    您确实不想覆盖传递到控制器操作中的
    req
    参数。使用其他名称

  • https.request(选项,函数(res){…}
    此处相同。这样做会覆盖
    https.request
    回调范围的
    res
    ,防止您使用传递给控制器的
    res
    参数提供的所有物品(例如:
    res.view

我想你应该仔细阅读一下闭包和回调:


您现在可能想更改密码。这是一个真名,但它是一个伪造的密码,只是为了测试此密码:D但谢谢:D似乎可以!谢谢,我将查看关闭和回调链接。不客气。如果您向第三方提出大量请求,您可以使用它让您的生活更轻松。