Fastify框架Node.js项目Linux部署报TypeError转换对象错误
问题定位
- 报错直接触发点:你调用
res.headers()时未传入任何参数。你使用的Fastify版本在Linux环境下无参调用headers()方法会返回undefined,后续Fastify内部逻辑执行Object.keys()读取header配置时,就会触发「无法将undefined或null转换为对象」的报错。 - 为什么本地Windows正常、查看源码找不到
Function.keys调用:你本地Windows安装的Fastify版本和Linux服务器上安装的版本不一致。npm安装依赖时如果没有锁版本,跨平台安装可能拉到不同小版本的代码,对应headers()方法的默认返回逻辑有差异,旧版本的Fastify的reply.js文件中确实存在Object.keys处理传入header参数的逻辑。 - 为什么try catch没捕获到异常:
send()方法的执行是异步的,你加的try catch只捕获了同步代码逻辑的异常,未捕获异步阶段抛出的错误。
解决方法
- 修正业务代码
无需额外设置响应头的情况下,直接删除headers()调用即可:
res.status(200).send({ "key": "value" })
如果需要保留headers()调用,主动传入空对象作为参数:
res.status(200).headers({}).send({ "key": "value" })
- 避免后续出现同类环境差异问题
在项目根目录执行npm shrinkwrap生成依赖版本锁文件,后续所有环境部署都会安装完全相同版本的依赖,消除版本差异带来的兼容问题。
验证
修改代码后重新部署,调用接口验证返回状态正常,服务端无报错即可。
内容的提问来源于stack exchange,提问作者Amirhossein Lashgari
相关产品推荐
相关产品推荐

