1

Express.js を使用してサーバーをセットアップしていますが、関数の結果を返すために「/」への「GET」リクエストが必要です。この関数は、ニュース API から get 要求を行っています。「/」を呼び出すと、関数がトリガーされ、結果 (「ストーリー」) がコンソールに記録されますが、「/」「GET」要求への応答で何も送信されません。「return」ステートメントをいくつかの異なる場所に配置しようとしましたが、まだ機能しません...どんなアイデアでも大歓迎です! ありがとう!

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

});

ストーリー.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
  }
4

1 に答える 1

2

非同期の問題です。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);
}

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

});
于 2015-05-15T12:44:01.573 に答える