You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fetch请求无法从同域/users端点返回JSON,报语法错误求助

解决Hapi.js /users接口返回首页源码导致JSON解析错误的问题

这个错误Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0指向的核心问题很明确:你的前端请求期望获取JSON格式数据,但后端返回的却是HTML(首页源码,开头的<标签打破了JSON解析规则)。结合你的Hapi.js路由代码,我整理了几个针对性的排查和解决方向:

1. 检查路由注册顺序

Hapi.js的路由匹配是按注册顺序优先匹配的,如果你的静态文件服务路由(比如用来返回首页的/*通配符路由)在/users路由之前注册,所有请求都会先命中静态路由,直接返回首页HTML。

解决方法:把/users这类API路由的注册代码放在静态文件路由之前,确保Hapi优先匹配到API路由。

2. 排查认证中间件的重定向逻辑

你的路由配置了options: AuthHelper.required,很大概率是认证失败时AuthHelper触发了重定向到首页的操作,导致接口返回的是首页HTML而非预期的JSON。

验证方法:临时注释掉options: AuthHelper.required,直接请求/users,如果能正常返回JSON,那就是认证中间件的问题。这时需要修改AuthHelper,让认证失败时返回JSON格式的错误响应(比如h.response({error: 'Unauthorized'}).code(401)),而非重定向到首页。

3. 完善handler的返回逻辑

你的handler代码未完成(await Us...),要确保handler最终明确返回JSON格式的数据:

handler: async (request, h) => {
  try {
    const users = await UserModel.find(); // 示例:查询数据库获取用户列表
    return h.response(users).code(200); // 明确返回JSON响应
  } catch (err) {
    return h.response({error: err.message}).code(500); // 错误场景也返回JSON格式
  }
}

如果handler没有明确返回值,Hapi可能会 fallback 到其他路由,导致返回首页内容。

4. 直接测试接口返回内容

用curl或者Postman直接请求/users,查看返回的原始内容:

curl http://your-domain/users

如果返回的是首页HTML,那问题肯定出在后端路由配置;如果返回的是正常JSON,那要检查前端请求的配置(比如是否携带了错误的Accept头,或者请求路径拼写错误)。

内容的提问来源于stack exchange,提问作者Nikola Stojaković

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:47:56