如果我访问以下页面(我知道凭据无效):

https://apis.live.net/v5.0/me/contacts?access_token=dummy_token

在浏览器中,我得到了格式正确的JSON:

{
   "error": {
      "code": "request_token_invalid",
      "message": "The access token isn't valid."
   }
}


但是,如果我尝试做的就是Node.js

    var request = require('https').request({

        host: 'apis.live.net',
        port: 443,
        path: '/v5.0/me/contacts?access_token=' + 'dummy',
        method: 'GET'
    },

    function (httpsres) {
        var contacts = '';
        httpsres.on('data', function (result) {
            contacts += result;
        });

        httpsres.on('end', function () {
            console.log(contacts);
        });

    });

    request.end();


输出如下所示:

}  }  "message": "The access token isn't valid."


如何修改程序,使输出与浏览器的结果匹配?

最佳答案

输出使用\r(回车)作为行分隔符。 Unix标准是\n(换行),而Windows是\r\n(CR / LF)。单独打印\r时,它将使光标返回到行的开头,但不会前进到下一行,任何其他文本都将覆盖您刚刚打印的内容。

特别:

{\r
   "error": {\r
      "code": "request_token_invalid", \r
      "message": "The access token isn't valid."\r
   }\r
}


前四行完全相互覆盖。打印“ message”行后,前五个字符被}覆盖;然后第一个字符被{覆盖。

您的回应很好;它的打印搞砸了。要查看实际输出,请尝试将代码输送到less(将\r显示为^M)或hexdump -C(将显示0d)(而不是通常的0a对于\n)。

在打印之前将其插入:

contacts = contacts.replace(/\r/g, "\n");


它会被修复。

09-12 08:21