【问题标题】:request npm module not working after recent update最近更新后请求 npm 模块不起作用
【发布时间】:2016-10-11 09:47:45
【问题描述】:

代码在 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) 它不在乎我写什么 URL,会进入“响应”部分而不给出任何“错误”。

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

注意:最近请求模块有更新,会不会有问题?

我正要在生产环境中推送这段代码,但在运行 npm install 时出错。请帮助我,我不想转移到另一个休息 HTTP 客户端。

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

【问题讨论】:

  • 对于 404 错误,它只会转到响应事件,尝试 xy23234z.com 并查看它是否记录错误。
  • 就是这个问题,它没有显示任何错误
  • 在你的成功处理程序中做一个console.log(response);,看看它会给你什么。
  • 我也有同样的问题

标签: node.js npm request httpclient


【解决方案1】:

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

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');
});

希望有帮助:)

【讨论】:

  • 我试过你的代码。问题:它只是忽略了我输入的 URL。
【解决方案2】:

您应该尝试其他一些 request.post() 样式。这可能会解决您在读取 ​​URL 时遇到的问题。

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”将您的请求发送到服务器。您可以在其中看到接收主机。

【讨论】:

  • 是的,我已经尝试了所有这些选项。让我告诉你,它只是不会因为 POST 请求而停止,它甚至不会让 GET 请求通过。好像没有任何东西与请求模块一起工作。不只是我,其他一些人也有同样的问题。检查这个:gitter.im/request/request
  • notion 上面的答案对我有用(6.8.0)。您是否尝试将节点版本更新到 4.6.0 (LTS) 或 6.8.0(最新)?
  • @DhruvilThaker 如果你看到其他人也有这个问题,而且这似乎是模块中的一个错误,你为什么在这里问一个问题?你为什么不在那里发布一个问题:github.com/request/request/issues如果你因为请求有错误而苦苦挣扎,为什么不切换到超级代理?它具有几乎相同的界面。
  • @DanielKhan 在这里提出问题之前我不知道这一点。如果我已经知道了,我为什么还要使用我的声誉积分来获得赏金?
【解决方案3】:

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

例如

你的包在 github 上托管:

https://github.com/request/request

具体版本是:

v2.75.0

然后你可以在你的package.json(如果你使用package.json)或你提到你的request模块的其他地方指定这样的特定版本

https://github.com/request/request#v2.75.0

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2019-07-29
    • 1970-01-01
    • 2021-11-05
    • 2014-08-29
    相关资源
    最近更新 更多