gpt4 book ai didi

javascript - "Unexpected end of input"消息从简单的 POST 请求到 node.js 的响应

转载 作者:搜寻专家 更新时间:2023-11-01 00:10:33 25 4
gpt4 key购买 nike

我编写了一个简单的 node.js 程序来演示我在其他地方遇到的问题。

给定以下 node.js 程序:

var http = require('http');
http.createServer(function (req, res) {
// simple repro for json deserializaiton error cause by right quote character '’'
var json = { 'foo': 'bar’s answer' };
var write = JSON.stringify(json);
res.writeHead(200, { 'Content-Type': 'application/json', 'Content-Length': write.length });
res.end(write);
}).listen(8085, '127.0.0.1');

当我使用 chrome 的 Advanced Rest Client 对此进行 POST 时,我得到了 200 OK 响应,但在响应内容的 JSON 选项卡中,出现了术语“意外输入结束”,而不是已解析的 json。

在原始选项卡中,显示了字符串“{"foo":"bar's answer",清楚地表明了为什么 json 无法被解析(缺少结尾的 '}')。

如果我从原始对象中删除“”,响应在返回时解析得很好。

知道为什么一个简单的 ''' 会导致 json 解析失败吗?我在测试中遇到了与其他各种 Angular 色相同的问题。

最佳答案

您需要将 Content-Length 设置为 byteLength相反:

res.writeHead(200, {
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(write)
});

因为它与 String length 不同:

console.log('bar’s answer'.length);             // 12
console.log(Buffer.byteLength('bar’s answer')); // 14

这是因为,使用 UTF-8 encoding ( Node's default ),只有当字符串完全由 ASCII code points 组成时,它们才会匹配(U+0000 - U+007F),而此字符串包含 U+2019 , “single curved quote, right 。”超出该范围,代码点根据需要扩展为多个字节——在 U+2019 的情况下为 3:

[ 0xE2, 0x80, 0x99 ]

关于javascript - "Unexpected end of input"消息从简单的 POST 请求到 node.js 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14700314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com