Fra*_*kie 5 post json node.js express
我想简单地检查我的服务器在名为 '/route' 的路由上获取的 POST 请求正文的语法:
/// 我的代码 ///
app.use(express.json());
function isJsonString(str) {
try {
console.log('JSON Parsing function...');
JSON.parse(str);
}
catch (e) {
console.log("Error : " + e);
return false;
}
return true;
}
app.post('/route', function(req, res) {
var isJsonString_result = isJsonString(req.body);
console.log(isJsonString_result);
if(isJsonString_result === true){
console.log('OK continue');
res.status(200).send('ok');
}
else{
console.log('Wrong body format');
res.status(404).send('ko');
}
})
Run Code Online (Sandbox Code Playgroud)
/// 结果 ///
以下是我使用此 JSON 从 Postman 发送 POST 请求时得到的结果(使用标头“Content-Type”:“application/json”发送):
{
"key1": "value1",
"key2": "value2"
}
Run Code Online (Sandbox Code Playgroud)
/// 邮递员结果 ///
高
/// 控制台日志 ///
JSON 解析函数...
错误:SyntaxError:JSON 中的意外标记 o 在位置 1 false
错误的正文格式
=> 解释似乎是“JSON.parse”无法解析现有的 JSON...
所以第一个问题:我如何检查正文是否是正确的 JSON 格式?
并使用其他缺少引号的 JSON(始终与标题“Content-Type”:“application/json”一起发送):
{
"key1": "value1",
"key2: "value2"
}
Run Code Online (Sandbox Code Playgroud)
/// 邮递员结果 ///
以“SyntaxError: Unexpected token v in JSON at position 32”开头的长“错误”消息
/// 控制台日志 ///
相同 :
SyntaxError: Unexpected token v in JSON at position 32 at JSON.parse ()
……
=> 不知道如何处理这个问题,如果有许多具有错误正文语法的 POST 请求,我的“日志”可能会增长得非常快。
你能帮我解答这两个问题吗?
谢谢 !
问题是您在express.json()尝试验证 JSON 数据的路由之前使用:
app.use(express.json());
Run Code Online (Sandbox Code Playgroud)
这将尝试解析传入的 JSON 数据,并在无效时返回错误。这就是您的第二个请求失败的原因。
您使用有效 JSON 的第一个请求失败的原因是req.body它将包含以下结果JSON.parse();就是express.json()这样。所以它将是一个对象,而不是一个字符串,这就是为什么你的检查失败(因为JSON.parse只能用于字符串或缓冲区)。
有一个选项verify为express.json()你可以用它来验证传入的数据:
app.use(express.json({
verify : (req, res, buf, encoding) => {
try {
JSON.parse(buf);
} catch(e) {
res.status(404).send('ko');
throw Error('invalid JSON');
}
}
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |