我的node.js文件中有一个get调用和一个post调用,它们都使用我在这些调用之外初始化为空字符串的相同变量。在post调用中,我设置了变量,而在get调用中,我将变量的值返回给请求值的clientside angularjs。在我的angularjs文件中,我首先进行post调用然后调用get调用,这意味着应该设置值,并且在发出get调用并返回时应该可用。这就是我正在做的事情:
的NodeJS
var myUrl= "";
app.post('/post', function(req, res){
myUrl = res.url;
});
app.get('/get, function(req, res){
res.json({result: myUrl});
});
AngularJS:
var promise = $http.post('/post')
.then(function(response){
return $http.get('/get');
}).then(function(response){
console.log(response.data.result);
});
我已经尝试过AngularJS承诺链调用,但它仍然无法正常工作。我遇到的问题是,当我在第一轮请求中进行get调用时,即使已经发出了post调用,url变量还没有设置,因此get调用返回一个空字符串。在第二轮请求中,get调用返回从第一个post调用中设置的值,依此类推。
关于为什么会发生这种情况的任何想法以及如何解决此问题的建议,以便get调用返回在同一轮请求中的post调用中设置的值(当调用后调用时发出get调用做)?我对NodeJS很新,所以感谢任何帮助!
答案 0 :(得分:3)
你的角度代码很好,虽然你错过了一件小事。我修改了你的代码并进行了测试,它按预期工作。
解决方案:
var myUrl= "";
app.post('/post', function(req, res){
//not res.url
myUrl = req.url;
//Your missed this!
res.status(204).end();
});
app.get('/get, function(req, res){
res.json({result: myUrl});
});
说明:
如果没有res.status(204).end();
或res.send({})
或res.json({})
,/post
调用只会更新网址然后挂起并且什么都不做,永远不会返回并最终会超时。因此,当您下次拨打/get
时,您会收到该网址。
您必须考虑以下事实:您的所有路由处理程序都只是middleware
,您必须生成响应或执行next
中间件。
在你的情况下,你想要处理请求并希望在那里结束,它需要发送一些响应。所以我们发送了res.status(204).end();
,意思是:There is no content to serve
希望这有帮助!