MEAN Stack添加Follow功能时遇JSON解析错误:Unexpected token # at position 0
搞定JSON解析错误:添加Follow功能的问题排查方案
嘿,我来帮你解决这个头疼的JSON解析错误!这个报错的核心原因很明确:你的服务器用body-parser解析JSON请求体时,收到的内容根本不是合法的JSON格式——开头出现了#字符,而JSON语法里完全不允许这种字符,直接导致解析失败。结合你说的“通过URL获取用户名”的需求,大概率是这几个场景出了问题,我给你逐个拆解解决方案:
可能的问题1:用GET请求却硬要解析请求体
如果你的Follow功能是通过GET请求实现的(比如URL是/follow?username=张三),那用户名参数是在URL的查询串里,根本不在请求体里。但如果你的路由还在试图用req.body.username获取参数,同时body-parser还在等着解析JSON请求体,就会因为请求体为空或者内容不合法报错。
解决办法:
- 改用
req.query.username来获取URL里的用户名参数 - 确保路由逻辑匹配GET请求,示例代码如下:
// 处理Follow的GET请求,从URL查询串拿用户名 app.get('/follow', (req, res) => { const targetUsername = req.query.username; // 这里写你的关注逻辑,比如更新数据库的关注关系 res.status(200).json({ message: `成功关注 ${targetUsername}!` }); });
可能的问题2:POST请求的格式不匹配
如果是用POST请求传参数,但你犯了这两个错误之一:
- 传的是表单数据(比如
application/x-www-form-urlencoded格式),但只配置了body-parser的JSON解析器 - 请求体里加了
#开头的注释(JSON不支持注释!),或者内容本身不是标准JSON
解决办法:
- 如果是传表单数据,先在服务器里添加表单解析的配置:
app.use(bodyParser.urlencoded({ extended: true })); // 之后就可以用req.body.username获取参数
- 如果确实要传JSON,必须满足两个条件:
- 前端请求头设置
Content-Type: application/json - 请求体是纯JSON格式,比如
{"username": "张三"},绝对不能加注释或者多余字符
- 前端请求头设置
可能的问题3:请求内容意外带了#字符
检查一下你的前端请求代码,是不是不小心把请求体写成了#{"username": "xxx"},或者URL参数转义错误导致请求体里混入了#字符。可以用Postman或者浏览器控制台的Network面板,查看实际发送的请求内容,快速定位问题。
内容的提问来源于stack exchange,提问作者Hathefah Al-Sharami
相关产品推荐
相关产品推荐

