我有一个调用外部Web服务(http://www.fantasyfootballnerd.com/service/nfl-teams/json/test/)的路由,但每当我调用该路由时,它会挂起90秒或更长时间。这是我点击的路线:http://localhost:3000/external/teams
我通过npm(request
)使用npm install request
模块。我的问题似乎与这个问题类似:Node.JS Unable to call a service running on localhost on different port
我已尝试使用Chrome扩展程序Postman并直接将路径输入我的浏览器,但两者都挂了一段时间然后关闭请求而没有返回数据。有一点需要注意的是浏览器永远不会冻结,它似乎只是处理了一段时间。并且永远不会返回错误。
这是我的路线:
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var request = require('request');
/* GET /players listing. */
router.get('/teams', function(req, res, next) {
var result;
request.get("http://www.fantasyfootballnerd.com/service/nfl-teams/json/njrrdrk5f999/", function(err, res, body){
if(!err){
result = body;
} else {
console.log(err);
}
});
res.send(result);
});
module.exports = router;
知道为什么这从未解决?
答案 0 :(得分:1)
此代码错误,因为它在异步请求返回之前执行res.send()
:
/* GET /players listing. */
router.get('/teams', function(req, res, next) {
var result;
request.get("http://www.fantasyfootballnerd.com/service/nfl-teams/json/njrrdrk5f999/", function(err, res, body){
if(!err){
result = body;
} else {
console.log(err);
}
});
res.send(result);
});
您必须将res.send(result)
置于回调中,并且必须将request.get()
调用的第二个参数命名为{{1}中与res
参数不同的名称调用,这样你就可以到达第一个router.get()
参数来使用它。
res
我不确定这会解释30秒的延迟,但这肯定是原始代码无效且无法工作的一个原因。