如果我访问以下页面(我知道凭据无效):
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");
它会被修复。