javascript - 如何使用回调函数在 Node js 中返回 api 响应

标签 javascript node.js rest

我是回调函数的新手。实际上我在 Node js 中使用请求模块来获取一些信息。我很困惑如何返回我的响应,因为 Javascript 本质上是异步的。我有以下代码。 我的app.js代码如下:

var express = require('express');

var app = express();

const request = require('request');

var call = require('./method');
app.use(express.json());

app.post('/call', function(request, response){
    var json = request.body;
    var p1 = json.p1;
    var p2 = json.p2;
    var p3 = json.p3;
    var p4 = json.p4;
    call.callApi(p1, p2, p3, p4);

    //response.send(request.body); 
});
app.listen(3000);

我的名为method.js的函数文件如下:

const request = require('request');

function callApi(p1, p2, p3, p4, callback) {

    var api = "http://test.roadcast.co.in:8088/api/route/" + p1 + "/" + p2 + "/" + p3 + "/" + p4;
    console.log(api);
    request(api, function(err, res, body) {
        var result = body;
        return callback(result, false);
        //console.log(body);
        //return result;
    });
}

module.exports = {
    callApi: callApi,
};

我通过在正文中发送 json 数据来请求 POST 请求,如下所示:

{ "p1":"28.7033129", "p2":"77.1542682", "p3":"28.709637", "p4":"77.291254" }

我得到的结果是正确的,但我只是想返回响应,请纠正我哪里出错了。

最佳答案

就像任何其他回调一样。在您的代码中,您没有为 callback 参数传递任何内容。如果你这样做,并使用它的参数,你就可以编写响应。在 post 回调期间不同步写入响应是可以的(很好并且完全正常)。

例如:

app.post('/call', function(request, response){
    var json = request.body;
    var p1 = json.p1;
    var p2 = json.p2;
    var p3 = json.p3;
    var p4 = json.p4;
    call.callApi(p1, p2, p3, p4, function(result) { // ***
        response.send(result);                      // ***
    });                                             // ***
});

也就是说,您应该更改回调以匹配标准的 Node 回调样式(或采用 promises,这会更好):让它传递一个错误或 null 作为第一个参数,并且结果(如果有的话)作为第二个。例如:

function callApi(p1, p2, p3, p4, callback) {

    var api = "http://test.roadcast.co.in:8088/api/route/" + p1 + "/" + p2 + "/" + p3 + "/" + p4;
    console.log(api);
    request(api, function(err, res, body) {
        return callback(err, body); // ***
    });
}

然后

app.post('/call', function(request, response){
    var json = request.body;
    var p1 = json.p1;
    var p2 = json.p2;
    var p3 = json.p3;
    var p4 = json.p4;
    call.callApi(p1, p2, p3, p4, function(err, result) { // ***
        if (err) {                                       // ***
            // Send error response                       // ***
            // ...                                       // ***
        } else {                                         // ***
            // Send successful response                  // ***
            response.send(result);                       // ***
        }                                                // ***
    });
});

关于javascript - 如何使用回调函数在 Node js 中返回 api 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50698680/

相关文章:

node.js - 通过模型 Sequelize 插入值

javascript - 如何使用中间件为 REST API 创建用户组安全

REST api 版本控制(仅对表示进行版本控制,而不对资源本身进行版本控制)

javascript - Jquery 之间的区别 Jquery 绑定(bind)事件

node.js - Mongoose /MongoDB 错误 : Cannot determine state of server

javascript - 仅从我的应用程序访问我的后端 node.js

javascript - Backbone /rails 之间使用 REST url 进行通信时出现问题

javascript - Algolia 和 WordPress 搜索页面突然无法工作,控制台显示 "Uncaught typeError"

javascript - Jquery 同位素复选框过滤

javascript - 如何扩展 DIV 以使用整个父 DIV 高度