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

为什么HapiJS中h.response返回字符串而非文档描述的对象?

问题原因
  • server.inject() 方法返回的响应对象中,payload 字段默认是字符串格式,Hapi不会根据响应的content-type自动将JSON字符串转换为JavaScript对象,这是框架的预期设计。
解决方案

你可以通过两种方式修复测试用例:

方案1:手动解析payload

把获取到的字符串格式payload通过JSON.parse()转换为对象后再做断言:

it('payload should be a json object', async () => {
    const res = await server.inject({
      method: 'GET',
      url: '/users'
    })
    const parsedPayload = JSON.parse(res.payload)
    expect(parsedPayload).to.be.object()
})

方案2:直接使用已解析的result字段

Hapi的inject响应对象内置了result字段,存储的是路由handler返回的原始未序列化对象,无需手动解析:

it('payload should be a json object', async () => {
    const res = await server.inject({
      method: 'GET',
      url: '/users'
    })
    expect(res.result).to.be.object()
})
优化提示

你路由代码中重复设置content-type的操作是冗余的,Hapi在返回对象类型响应时会自动设置content-type为application/json,你可以删除.type('application/json')和.header('content-type', 'application/json')两行代码。

内容的提问来源于stack exchange,提问作者Diesan Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:04