Javascript 为什么Node.js不能正确解析以下页面?
如果我访问以下页面(我知道凭据无效): 在浏览器中,我得到格式良好的JSON:Javascript 为什么Node.js不能正确解析以下页面?,javascript,node.js,Javascript,Node.js,如果我访问以下页面(我知道凭据无效): 在浏览器中,我得到格式良好的JSON: { "error": { "code": "request_token_invalid", "message": "The access token isn't valid." } } 但是,如果我尝试这样做,则等效的是Node.js var request = require('https').request({ host: 'apis.live.
{
"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
}
前四行完全覆盖了彼此。打印“消息”行后,前五个字符被}
覆盖;然后第一个字符被{
覆盖
您的回答很好;打印错误。若要查看输出的真实情况,请尝试将代码管道化为less
,它将\r
显示为^M
,或管道化为hextump-C
,它将显示0d
(而不是\n
通常的0a
)
在打印前插入以下内容:
contacts = contacts.replace(/\r/g, "\n");
它将被修复。这看起来可疑,好像接收到的数据没有正确的行尾,无法在控制台上正确显示(原始CR字符或类似字符)。还可以尝试打印出
内容的长度,看看是否合理。