javascript - http请求函数不会返回结果

标签 javascript node.js function express requestjs

我正在使用 Express.js 设置一个服务器,我想要一个“GET”请求到“/”以返回一个函数的结果。该函数正在从新闻 API 发出获取请求。当我调用“/”时,该函数被触发,结果(“故事”)被记录在控制台中,但在对“/”“GET”请求的响应中没有发送任何内容。 我已经尝试将“返回”声明放在几个不同的地方,但它仍然不起作用......任何想法将不胜感激!谢谢!

应用程序.js

var express = require('express');
var app = express();
var stories = require('./stories.js')


app.get('/', function(req, res){
  var returnedStories = stories.searchStories();
  res.send(returnedStories);
})

var server = app.listen(3000, function () {

  var host = server.address().address;
  var port = server.address().port;

  console.log('going live on port', host, port);

});

故事.js

var request = require('request');




function searchStories(){
  var stories = '';
  request({
    url:'http://content.guardianapis.com/search?q=christopher%20nolan&api-key=3th9f3egk2ksgp2hr862m4c9',
    json: true},
     function (error, response, body) {
    if (!error && response.statusCode == 200) {
      console.log(body.response.results) ;
      stories = body.response.results;
      return stories;
    }
  })
};


module.exports = {
  searchStories: searchStories
  }

最佳答案

这是一个异步问题。 searchStories 函数在执行 res.send 时未完成。

您可以使用 promise (https://www.promisejs.org) 或回调。我会给你一个回调的例子。

故事.js

module.exports.searchStories = function (callback) {
  var stories;

  // GET your stories then execute the callback with the result

  stories = [
    {id: 1, name: "story 1"},
    {id: 2, name: "story 2"}
  ];

  callback(stories);
}

应用程序.js

var express = require('express');
var app = express();
var stories = require('./stories.js')


app.get('/', function(req, res){
  stories.searchStories(function (returnedStories) {
    res.send(returnedStories);
  });
})

var server = app.listen(3000, function () {

  var host = server.address().address;
  var port = server.address().port;

  console.log('going live on port', host, port);

});

关于javascript - http请求函数不会返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30257377/

相关文章:

javascript - 延迟的 jQuery AJAX 请求不运行 done() 回调函数

php - 访问属性 'document' 的权限被拒绝

mysql - 如何在 SEQUELIZE (nodeJS) 中创建触发器?

node.js - Mongojs:忽略重复对象插入

C# 在另一个函数中打破其他函数循环

Javascript 从基于另一个数组的数组中删除元素

javascript - 如何在对象处于隐藏模式时节省空间?

javascript - 如何将 Parrot AR.Drone 编程为直线飞行

jquery - 将 CSS 添加到 jQuery 中选中的单选按钮和标签

javascript - 为什么使用此 JavaScript 代码我只能看到最后加载的图像?