根据HTTP GET
调用的响应(使用本地http模块),在发出JSON.parse()
事件后,我尝试end
响应。我肯定知道我获取的数据是有效的JSON,但JSON.parse
仍然会引发错误。而且我的日志表明JSON.parse
应该先被调用。
res.on("end", () => {
console.log('Req ended message is', body);
try {
var passport = JSON.parse(body);
} catch (e) {
w.info(
"Cannot parse the response from : " +
process.env.mongo_api_host +
" | error : " +
e
);
}
callback(passport);
return;
});
我的日志显示:
info: Getting MongoDB passport for model : CESI
info: Cannot parse the response from : mongo_api | error : SyntaxError: Unexpected end of JSON input
info: Req ended message is *long valid JSON data*
我们可以在日志中清楚地看到在"Req ended message is : ... stuff"
之前捕获并记录了解析错误。
我想念什么?
编辑1:
即使按照注释中的建议将callback(passport)
放在try块中,它仍然可以做到:
res.on("end", () => {
try {
console.log("Req ended message is", body);
var passport = JSON.parse(body);
//TODO What if you get an array ?
if (passport._id) delete passport._id;
callback(passport);
} catch (e) {
w.info(
"Cannot parse the response from : " +
process.env.mongo_api_host +
" | error : " +
e
);
}
return;
});