代码之家  ›  专栏  ›  技术社区  ›  user3226932

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

  •  4
  • user3226932  · 技术社区  · 9 年前

    我的节点中有一个获取呼叫和一个发布呼叫。js文件,这两个文件都使用了我在这些调用之外初始化为空字符串的相同变量。在post调用中,我设置了变量,而在get调用中,将变量的值返回给请求该值的客户端angularjs。在我的angularjs文件中,我首先进行post调用,然后进行get调用,这意味着应该设置该值,并且在发出并返回get调用时该值应该可用。我现在做的是:

    节点JS

    var myUrl= "";
    app.post('/post', function(req, res){
       myUrl = res.url;
    }); 
    
    app.get('/get, function(req, res){
        res.json({result: myUrl});
    });
    

    角度JS:

    var promise = $http.post('/post')
            .then(function(response){
    
                return $http.get('/get');
    
            }).then(function(response){
                console.log(response.data.result);
            });
    

    我尝试过AngularJS承诺链调用,但仍然没有成功。我遇到的问题是,当我在第一轮请求中进行get调用时,url变量尚未设置,即使post调用已经发出,因此get调用返回一个空字符串。在第二轮请求中,get调用返回从第一次post调用设置的值,依此类推。

    关于为什么会发生这种情况以及如何解决这个问题的建议,以便get调用返回在同一轮请求中的post调用中设置的值(在post调用完成时发出get调用)?我对NodeJS相当陌生,所以任何帮助都值得感谢!

    1 回复  |  直到 9 年前
        1
  •  3
  •   Dave Amit    9 年前

    你的角度代码很好,尽管你错过了一件小事。我修改了您的代码并进行了测试,它可以按预期工作。

    解决方案:

    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 call只是更新url,然后挂在那里,什么都不做,永远不会返回,最终会超时。所以下次你打电话的时候 /get 你得到了URL。

    您必须考虑到这样一个事实:所有的路由处理程序都是 middleware 并且必须生成响应或执行 next 中间件。

    在您的情况下,如果您想处理请求并希望在那里结束,则需要发送一些响应。所以我们发送了 res.status(204).end(); ,意思是: There is no content to serve

    希望这有帮助!