请求npm模块在最近更新后无法正常工作

时间:2016-10-11 09:47:45

标签: node.js npm request httpclient

代码在20天之前工作正常,现在我正在尝试运行相同的代码,但它不再起作用(甚至没有显示任何错误)。

     var request = require("request");
     var dataToSend = {
              key: "value",
              key1: "value1"
            };

    request.post({
            url: 'http://localhost:9092/services/reports/generateReport',
            form: dataToSend
        }, function optionalCallback(err, httpResponse, body) {
            if (err) {
                return console.error('upload failed:', err);
            }
        })
          .on('response', function (response) {
            console.log('success log'); 
            res.download('public/uploads/report.pdf');
        })
          .on('error', function (response) {
            console.log('Error downloading report file');
        })
          .pipe(fs.createWriteStream('public/uploads/report.pdf'));

输出始终是“成功日志”。即使我写了一些随机URL,它也会显示“成功日志”

Web服务工作正常,我已经使用外部REST客户端验证了它。

问题在于:

1)它不关心我写的是什么网址,会在不给出任何“错误”的情况下进入“响应”部分。

2)如何调试呢?没有显示任何错误

注意:最近请求模块中有更新,这可能是个问题吗?

我正准备在生产中推送此代码,并在运行npm install时出错。请帮助我,我不想转移到另一个休息的HTTP客户端。

node v4.4.5
npm v3.10.8
request v2.75.0

3 个答案:

答案 0 :(得分:0)

传递回调时,您不需要定义事件处理程序。代码可以重构为:

request.post({
    url: 'http://localhost:9092/services/reports/generateReport',
    form: dataToSend
}, function optionalCallback(err, httpResponse, body) {
    if (err) {
        console.error('upload failed:', err);

        return res.status(500); 
    }

    //
    // TODO: Check if the HTTP status code fits your expectations:
    //
    // if (httpResponse.status !== 201) {
    //     return res.status(500);
    // }
    //

    res.download('public/uploads/report.pdf');
});

希望有所帮助:)

答案 1 :(得分:0)

您应该尝试其他一些request.post()样式。这可以解决您阅读网址时遇到的问题。

request.post('http://service.com/upload', {form:{key:'value'}})
// or 
request.post('http://service.com/upload').form({key:'value'})
// or 
request.post({url:'http://service.com/upload', form: {key:'value'}}, function(err,httpResponse,body){ /* ... */ })

您通过" response.request"将您的请求发送到服务器。你可以在那里看到接收主机。

答案 2 :(得分:0)

如果您因为最近的request模块更新而认为它已损坏,那么您可以回滚到request模块的旧版本,一切都应该没问题,并开始像以前一样工作。

例如

您的软件包在github上托管:

https://github.com/request/request

具体版本是:

v2.75.0

然后你可以在package.json(如果你使用的是package.json)或你提到request模块的其他地方

中指定这样的特定版本
https://github.com/request/request#v2.75.0

希望,这有助于你