http请求函数不会返回结果

我正在build立一个Express.js的服务器,我想'GET'请求'/'返回一个函数的结果。 该函数正在从新闻API获取请求。 当我调用'/'时,函数被触发,结果('故事')被logging在控制台中,但是对'/''GET'请求的响应没有被发送。 我曾尝试将“返回”声明放在几个不同的地方,但仍然无效…任何想法都将得到巨大的赞赏! 谢谢!

app.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); }); 

stories.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 } 

这是一个asynchronous的问题。 searchStories函数在执行res.send时没有完成。

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

stories.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); } 

app.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); });