Node.js实现JWT认证时POST请求报Unexpected token } JSON解析错误
问题根因
这个报错和JWT签发逻辑、接口业务代码无关,是请求阶段的JSON格式非法,触发了body-parser解析失败。
从错误栈可以看到,异常抛出在body-parser的JSON解析环节,说明请求收到后还没走到你写的/login路由处理逻辑,就因为格式不对被拦截了,所以排查路由内的JWT代码找不到问题。
你当前传的请求体存在语法错误:
{ "username": "Kyle", }
"username": "Kyle"行尾多了一个多余的尾随逗号。标准JSON语法不支持对象/数组最后一个元素后加逗号,解析器读到这个逗号时会预期后面还有新的键值对,实际却碰到了闭合的},就会抛出Unexpected token } in JSON at position 24的错误。
修复方法
删掉请求体里最后一个键值对后面的多余逗号,改成符合规范的JSON格式即可:
{ "username": "Kyle" }
修改后重新发起POST请求,body-parser就能正常解析请求体,请求会正常进入/login路由执行JWT签发逻辑,报错不会再出现。
排查经验
- 遇到这类JSON解析报错,优先检查请求体格式:是否存在多余尾随逗号、字符串是否用了双引号(JSON不支持单引号包裹字符串)、括号/引号是否配对
- 如果错误栈定位在body-parser的JSON解析逻辑,说明请求根本没进入业务路由层,不用先排查JWT、数据库操作这类业务代码,先校验请求格式合法性即可。
内容的提问来源于stack exchange,提问作者Chris Faux
相关产品推荐
相关产品推荐

