为什么我的第一个Nodejs http PUT请求有效,而第二个和后续超时?

时间:2015-11-05 21:42:46

标签: node.js put http-request

我已经和它争斗了一段时间。我有一组mocha测试用例,我正在测试REST API。为此,我发送HTTP PUT请求并接收响应。

我正在使用Async库来控制逻辑流程,特别是此模型中的瀑布。

第一个PUT请求通过就好了,我从服务器得到了预期的响应。

如果我复制完全相同的代码,则第二个PUT请求超时。它到达http.req()行并且没有在那里打印console.log()消息,所以可能会以某种方式跳过请求,可能吗?

帮助弄清楚这是什么意思。

这是我的mocha测试用例中的相关代码段示例:

async.waterfall([
        function someFunction(cb) {
            var cmd = url.parse('http://<my_ip>:<my_port>/some/command');

            cmd.headers = {};
            cmd.headers['Content-Type'] = 'application/json';
            cmd.method = 'PUT';

            console.log('command:', cmd);

            var req = http.request(cmd, function (res) {
                console.log('sending some command at ' + cmd.href);

                res.on('data', function (dataChunk) {
                    console.log('dataChunk:', dataChunk.toString());
                });

                res.on('end', function () {
// This logs, and completes correctly
                    console.log('done sending some command');
                    var statusCode = res.statusCode;

                    cb(null, statusCode);
                });

                res.on('error', function (e) {
                    console.error('Problem with response: ' + e.message);
                    cb(e, null);
                });
            });

            req.on('error', function(e) {
                console.error('problem with request: ' + e.message);
                cb(e, null);
            });

            req.end();
        },
function someFunctionDupe(statusCode, cb) {
            var cmd = url.parse('http://<my_ip>:<my_port>/some/command');

            cmd.headers = {};
            cmd.headers['Content-Type'] = 'application/json';
            cmd.method = 'PUT';

            console.log('command:', cmd);

            var req = http.request(cmd, function (res) {
// This line never executes:
                console.log('sending some command at ' + cmd.href);

                res.on('data', function (dataChunk) {
                    console.log('dataChunk:', dataChunk.toString());
                });

                res.on('end', function () {
                    console.log('done sending some command');
                    var statusCode = res.statusCode;

                    cb(null, statusCode);
                });

                res.on('error', function (e) {
                    console.error('Problem with response: ' + e.message);
                    cb(e, null);
                });
            });

            req.on('error', function(e) {
                console.error('problem with request: ' + e.message);
                cb(e, null);
            });

            req.end();
        },
// code continues

0 个答案:

没有答案