Node.JS请求模块回调未触发

时间:2016-02-23 09:30:34

标签: javascript node.js http-post

我使用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库运行上面的代码,但无济于事。回调函数永远不会被触发,请求也不会通过。我不知道为什么。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

查看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事件应该被解雇。

答案 2 :(得分:0)

我也碰到了这个。我最终创建了一个单独的js文件,其中只包含请求,没有describe和it方法,并使用&m; mocha mynewbarebonesreq.js'运行它。突然间我可以看到mocha被抛出并吞噬了一个例外(标准记者,spec)。

我终于安装并启用了显示例外的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();
        });
    });
}