【问题标题】:not getting full body with npm request package没有得到完整的 npm 请求包
【发布时间】:2017-04-04 04:51:36
【问题描述】:

我有以下函数,它返回一个获取数据的承诺。我正在使用request npm 模块。

let getData = function (user) {

    return new Promise(function (resolve, reject) {

        let url = 'https://someurl.com/' + user;

        request(url, function (error, res, body) {
            if (error) reject(error);
            try{
                resolve(cleanData(JSON.parse(body).items))
            }catch(e){
                console.log(body)
                console.log(url)
                console.log(e);
            }
        })

    })
}

当我履行我的承诺时,我有时会得到这样的结果:

SyntaxError: Unexpected token u in JSON at position 0

当我的身体被返回为未定义时,就会发生这种情况。但其他时候我也会得到这样的东西:

SyntaxError: Unexpected token f in JSON at position 11203

而其他时候(大多数时候),它会完美地完成。

我已经能够在调试时仔细检查这一点,似乎有时我会得到一个不完整的主体。我知道源网址中的正文并不完整。我通过直接使用浏览器访问 url 并确保 json 完整且有效来检查这一点。

发生了什么事?据我了解,request 函数的回调仅在响应准备好被使用时调用。

【问题讨论】:

    标签: json node.js request


    【解决方案1】:

    否 - 一旦有响应就会触发回调 - 请参阅 HTTP request API documentation。您需要将响应侦听器实现为:

    res.on('data', (chunk) => {
        // do the data accumulation here
      });
      res.on('end', () => {
        // do the resolve here
      });
    

    【讨论】:

      【解决方案2】:

      request module 中,如果您期望来自响应的binary 数据,则在请求选项中设置encoding: null

      摘自:

      encoding - 用于响应数据的 setEncoding 的编码。如果为 null,则正文作为缓冲区返回。其他任何内容(包括 undefined 的默认值)都将作为编码参数传递给 toString() (这意味着默认情况下这实际上是 utf8)。 (注意:如果你需要二进制数据,你应该设置 encoding: null。)

      https://www.npmjs.com/package/request

      【讨论】:

        猜你喜欢
        • 2020-06-10
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-23
        • 1970-01-01
        相关资源
        最近更新 更多