Node JS 上的 HTTP 请求回调

分享于2023年05月08日 http javascript json node.js 问答
【问题标题】:HTTP request callback on Node JSNode JS 上的 HTTP 请求回调
【发布时间】:2023-05-07 21:28:01
【问题描述】:

您好,我正在尝试使用回调方法通过 http 获得响应。但是我收到一个错误,说回调不是函数。

 module.exports.ipLookup = function (res, callback) {
    var http = require('http');
    var str = '';
    var options = {
        host: 'ip-api.com',
        port: 80,
        path: '/json/',
        method: 'POST'
    };
    var str= "";
    var req = http.request(options, function (res) {
        res.on('data', function (body) {
            str += body;
        });

        res.on('end', function () {
            callback(str);
        });
    });


    req.end();

    return str;

    }

id 应该通过 ip-api.com 返回 json api 响应。如果有人可以帮助我,将不胜感激。

  • 你如何使用/调用 ipLookup() callback 的值将在那里确定。
  • @JonathanLonowski,感谢您的回复。我需要将 js 文件放到另一个文件中。例如var 查找 = 要求('ip');使用lookup.ip();

【解决方案1】:

在另一个文件中,您正在加载函数,您需要确保使用回调参数。见下面的sn-p

var Lookup = require('./ip');
Lookup.ipLookup(function (response) {

    console.log(response) // check if response is valid
})

您需要将导出的函数更改为只接受一个参数,因为第一个参数不会像这样在函数体内使用。

module.exports.ipLookup = function (callback) {

    var http = require('http');
    var str = '';
    var options = {
        host: 'ip-api.com',
        port: 80,
        path: '/json/',
        method: 'POST'
    };

    var req = http.request(options, function (res) {

         res.on('data', function (body) {
             str += body;
         });

         res.on('end', function () {
             return callback(str);
         });
    });
    req.end();

}

【讨论】:

  • 感谢这就像一个魅力,还有一个问题,我如何使“响应”变量可以从变量范围中访问?希望你能帮助我解决这个问题。谢谢
  • 要么提升一个变量,该变量可以被其他函数共享或导出到另一个模块使用。还是将链作为一系列任务的一部分并在对象上工作以实现您想要做的事情?你想对上下文做什么?
  • 我想要做的是在这种情况下使用“响应”作为数组并分解值并分别分配它们。再次感谢您的帮助
  • 使用控制流库调用函数并将返回值合并到您的需求中。我使用 neo-async,因为还没有切换到原生 Promise!