【问题标题】:Accessing POST response data in Node JS Express request in enclosing method在封闭方法中访问 Node JS Express 请求中的 POST 响应数据
【发布时间】:2017-02-09 04:10:37
【问题描述】:

我在这里猛烈抨击 Node JS 学习曲线。我在 Node JS Express 中有一个应用程序,它使用请求向另一个 API 发出 POST。通话顺利进行,我的控制台日志显示返回的正确数据。我的问题是如何从 request.post(...) 中获取响应并在发出请求的方法中使用它。

这是我的场景。外部应用程序调用我的 API。我的 API 必须调用另一个 API 来获取一些数据来检查更新。 (我有一个 API 发出 POST 请求以响应来自外部应用的 POST 请求。)

这是我的 API 中向第三方请求某些数据的方法。我需要从这个 POST 响应中获取数据,在对外部应用程序的 POST 请求的响应中返回之前对其进行处理。

exports.getUpdates = function(variable1, variable2, variable3) {
     request.post(
        'http://myurl.exp/api//getUpdates',
        {json: {var1: variable1, ...}},
        function (error, response, body) {
           if(!error && response.statusCode == 200) {
             console.log(body);
           } else {console.log(error);}
        }
     );
  <I need to have this method return the response to the controller that called this method>
 };

我看过很多例子,但他们都只是说我越来越讨厌的 console.log()。我猜这与回调以及我如何处理不正确有关,但是我的研究都没有向我展示一个明确的方法 处理回调。任何帮助表示赞赏。

【问题讨论】:

标签: node.js express callback request


【解决方案1】:

利用回调

exports.getUpdates = function(variable1, variable2, variable3, callback) {
     request.post(
        'http://myurl.exp/api//getUpdates',
        {json: {var1: variable1, ...}},
        function (error, response, body) {
           if(!error && response.statusCode == 200) {
             callback(error, response, body);
           } else {console.log(error);}
        }
     );
 };

现在您可以在调用此函数时传递回调:

getUpdates(var1, var2, var3, function(error, response, body) {
    //stuff that you want to perform after you get response or error
});

但是,我建议使用更简洁的方法:

exports.getUpdates = function(variable1, variable2, variable3, callback) {
     request.post('http://myurl.exp/api//getUpdates', 
                     {json: {var1: variable1, ...}}, callback);
 };

现在您可以在调用此函数时传递回调:

getUpdates(var1, var2, var3, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            // stuff you want to do
        } else {
            console.log(error);
        }
    }
});

【讨论】:

  • 谢谢,这正是我所需要的,效果很好。我最终得到的是您通过将回调主体分配给原始响应来展示的内容。
  • 在原始请求路由处理程序中:exports.getUpdates = function(req, res) { event.getUpdates( req.body.var1, req.body.var2, req.body.var3, function(错误,响应,正文) { if(!error && response.statusCode == 200) { res.json(body); } else { console.log(error); } } };
  • 在事件控制器中:exports.getUpdates = function(variable1, variable2, variable3, callback) { request.post('myurl.exp/api//getUpdates', {json: {var1: variable1, ...}} , 打回来); };这会将正文 JSON 返回到显示它正在工作的外部应用程序,现在我可以获得真正的代码。谢谢桑德什!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
相关资源
最近更新 更多