【问题标题】:Node.JS Request Module Callback Not FiringNode.JS 请求模块回调未触发
【发布时间】:2016-02-23 09:30:33
【问题描述】:

我正在使用 node.js 的请求模块运行此代码

var hsKey    = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
var hsForm   = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
var hsHost   = "https://docs.google.com/"
var url = hsHost + "forms/d/" + hsForm + "/formResponse"

var form = {
    "entry.129401737": pointsAvg,
    "entry.2000749128": hiddenNeurons,
    "submit": "Submit",
    "formkey": hsKey
};

request.post({
    url: url,
    form: form
}, function (err, res, body) {
    console.log("Sent data");
});

我曾尝试仅使用标准 Node.JS 库运行上述代码,但无济于事。回调函数永远不会被触发,请求也不会通过。我不知道为什么。

【问题讨论】:

    标签: javascript node.js http-post


    【解决方案1】:

    我相信我已经找到了自己问题的答案。问题似乎是我没有在 Node.js 事件循环中分配任何时间来允许执行请求。

    【讨论】:

    • 那你是怎么解决的?
    【解决方案2】:

    看看this question:

    您的代码应该类似于

    var hsKey    = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    var hsForm   = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    var hsHost   = "https://docs.google.com/"
    var url = hsHost + "forms/d/" + hsForm + "/formResponse"
    
    var form = {
      "entry.129401737": pointsAvg,
      "entry.2000749128": hiddenNeurons,
      "submit": "Submit",
      "formkey": hsKey
    };
    
    request.post({
        url: url,
        form: form
    }, function (response) {
          response.setEncoding('utf8');
          response.on('data', function(chunk){
              //do something with chunk
          });
    });
    

    data 事件应在收到响应时触发。

    因此,如果您在 npm 阅读请求模块的文档

    request
        .get('http://google.com/img.png')
        .on('response', function(response) {
             console.log(response.statusCode) // 200 
             console.log(response.headers['content-type']) // 'image/png' 
         });
    

    有一个应该被触发的response 事件。

    【讨论】:

    • 对不起,如果我不是很清楚。我正在使用请求模块。您指定的是如何使用 node.js 的默认 http 库处理传入数据,在这种情况下我没有使用。
    • 您是否阅读了我引用的问题的标题?如何使用 Node.js 发出外部 HTTP 请求。抱歉与请求模块本身无关,但节点的内置 http 也可以做到这一点。
    • 关于您回答的最新编辑:我没有使用 GET 请求;我正在发出 POST 请求。此外,我知道应该触发回调,但我在这里提出的问题是没有触发回调并且没有执行请求。
    • 你检查过/等待超时了吗?
    • 这也可能是您的 SSL 问题。你试过一个简单的http请求吗? (非 https)
    【解决方案3】:

    我也遇到过这个。我最终创建了一个单独的 js 文件,其中只包含请求,没有 describe 和 it 方法,并使用“mocha mynewbarebonesreq.js”运行它。突然间,我可以看到 mocha 抛出并吞下了一个异常(使用标准记者,规范)。

    我终于安装并启用了显示异常的 mocha_reporter

    现在看起来像这样:

    describe('CMSLogin', function () {
        it('should log in as user ' + JSON.stringify(USER_PASS), function (done) {
            request({
                url: "http://cms.lund.multiq.com:3000/api/CMSUsers/login",
                method: "POST",
                headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json',
                },
                json: false,
                body: JSON.stringify(USER_PASS)
            }, (err, res, body) => {
                var parsedBody = JSON.parse(body);
                this.token = parsedBody.id; 
                console.log(this.token)
                assert.equal(USER_PASS.userId, parsedBody.userId);
                assert.doesNotThrow(() => Date.parse(parsedBody.created));
                if (err) { done.fail(err); }
    
                done();
            });
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2015-02-25
      • 1970-01-01
      • 2020-08-08
      • 2013-10-17
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多