我正在使用node.js并尝试解析请求的JSON主体。 我收到以下错误:
undefined:0
^
SyntaxError: Unexpected end of input
at Object.parse (native)
at IncomingMessage.<anonymous> (C:\node\xxxx.js:36:14)
at IncomingMessage.emit (events.js:64:17)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:130:23)
at Socket.ondata (http.js:1506:22)
at TCP.onread (net.js:374:27)
我在做:
request.on('data', function(chunk)
{
data+=chunk;
});
// and in the end I am doing
obj = JSON.parse(data); // it's complaining at this point.
输入是:
{
"result": "success",
"source": "chat"
}
答案 0 :(得分:29)
你试图在完全收到数据之前解析数据...把你的JSON.parse放在.end请求方法中
var data = '';
request.on('data', function(chunk){
data += chunk;
});
request.on('end', function(){
var obj = JSON.parse(data);
});
答案 1 :(得分:3)
使用您的编辑:您在代码中的哪个位置正在执行JSON.parse?请记住,request.on是异步的;在数据完成之前,您无法调用JSON.parse
(request.on('end')
)...如果您刚刚调用它,那么您可能会在数据到达之前调用它。
E.g。
request.on('data', function(chunk)
{
data+=chunk;
});
request.on('end', function() {
obj = JSON.parse(data);
});
可行,但
request.on('data', function(chunk)
{
data+=chunk;
});
obj = JSON.parse(data);
不会,因为JSON.parse可能会在任何'data'
回调之前被调用。
答案 2 :(得分:1)
“意外的输入结束”是您尝试解析空字符串或不完整的JSON字符串时会收到的错误消息:
// examples
JSON.parse('')
JSON.parse('{')
所以听起来你的数据源不可靠。处理此问题的正确方法是,如果/当JSON.parse()步骤失败时,将400-range response返回给客户端。
答案 3 :(得分:1)
function connectionHandler(request, response) {
var data = '';
request.on('data', function(buffer) {
data += buffer;
});
request.on('end', function() {
response.writeHead(200, {
'Content-Type': 'application/json'
});
try {
data = JSON.parse(data.toString());
} catch (e) {
response.end();
return;
}
if (!data) {
return;
}
// process "data" here
})
}