如何在Sails js(nodejs MVC)中使用外部rest api

我使用sailsjs作为节点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(); } 

variablesd显示正确的结果。 我如何在我的视图中使用请求结果? 我search了很多,但我无法find任何方法来显示在我看来。

这将实时更新? 所以,如果在restapi的变化,我不会刷新。

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

基本上,你会想等待你的请求来触发它的callback,然后将获取的数据res.localsres.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, eg: 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.requestcallback作用域的res – 阻止你使用res参数提供的所有好东西(例如: res.view )到你的控制器。

我想你会阅读closures和callback是有意义的:

什么是闭包和callback?