2015-05-15 2 views
1

Я настраиваю сервер с помощью Express.js, и я хочу, чтобы запрос «GET» возвращался к '/', чтобы возвращать результаты функции. Функция делает запрос получения от новостного API. Когда я вызываю вызов «/», функция запускается, и результаты («истории») регистрируются в консоли, но в ответе на запрос «/» «GET» ничего не отправляется. Я попытался поставить заявление 'return' в нескольких разных местах, и он все еще не работает ... любая идея была бы чрезвычайно оценена! благодаря!Функция http-запроса не возвращает результат

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 
    } 
+1

возможно дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-a-асинхронный вызов) –

ответ

2

Это асинхронное проблема. searchStories функция не закончена, когда вы выполняете res.send.

Вы можете использовать обещание (https://www.promisejs.org) или обратный вызов. Я приведу вам пример с обратным вызовом.

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); 

}); 
+0

Спасибо большое! Я поддерживаю и запускаю ... –

Смежные вопросы