AngularJS:http链调用和NodeJS的问题:在多个http调用中使用变量的问题

时间:2016-03-05 04:09:58

标签: javascript angularjs node.js http variables

我的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很新,所以感谢任何帮助!

1 个答案:

答案 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

希望这有帮助!