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

原文 标签 javascript node.js rest

我是回调函数的新手。实际上,我在节点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回调样式(或采用Promise,这会更好):让错误传递错误或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/

相关文章:

javascript - JavaScript从HTML生成PDF

java - Java中的RESTful Web服务

java - 用于Java的REST模型版本控制的好工具

java - 使用自签名证书时,与Tomcat服务器未发生SSL/TLS通信

javascript - 单击后禁用div并重新启用它

javascript - 柜台需要坚持记住最后一个数字

javascript - 事件对象如何工作?

javascript - http.get 解析错误,代码 : 'HPE_UNEXPECTED_CONTENT_LENGTH'

node.js - 迁移 knex : storing media, 图像或 blob 中的表

node.js - 如何同步沙发床 View ?