【问题标题】:How to use external rest api in Sails js (nodejs MVC)如何在 Sails js(nodejs MVC)中使用外部 rest api
【发布时间】:2014-03-12 13:03:53
【问题描述】:

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

但现在我需要/想要从外部休息 api 获取数据。 我在控制器中使用了它:

// 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 中的某些内容发生更改,我将不必刷新。

对不起,如果这是愚蠢的事情。

【问题讨论】:

  • 您现在可能需要更改密码。
  • 它是一个真实的名字,但它是一个假密码,只是为了测试这个 :D 但是谢谢 :D

标签: javascript node.js rest real-time sails.js


【解决方案1】:

基本上,您需要等待您的请求触发其回调,然后将获取的数据提供给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(options, function(res) {...} 相同。这样做会覆盖 https.request 回调范围的 res - 阻止您使用传递给控制器​​的 res 参数提供的所有好东西(例如:res.view)。

我猜你阅读闭包和回调是有意义的:

What are Closures and Callbacks?

【讨论】:

  • 这似乎做到了!谢谢,我会检查关闭和回调链接。
  • 不客气。如果您向第三方提出大量请求,您可以使用restler 让您的生活更轻松。
猜你喜欢
  • 2015-09-16
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2020-09-21
  • 2015-08-09
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多