Express Node.js中res.header方法使用数组参数的正确方式是什么?
Express 中res.header调用报错问题解答
你遇到的报错和数组本身的使用逻辑无关,问题出在两方面:
res.header是Express中res.set方法的别名,本身不支持直接传入扁平数组作为参数,它仅支持两种传参形式:- 传入单个对象,键为响应头名称,值为响应头内容
- 传入两个字符串参数,分别为响应头名称、响应头内容
- 特别注意:如果仅单个路由函数出现该报错,优先排查函数内是否存在
let res = xxx、const res = xxx这类重名变量声明,覆盖了Express传入的原生响应对象,导致变量上不存在header方法
正确设置响应头的代码示例
// 方案1:传入对象形式的响应头配置,推荐写法 const postHeader = { 'Access-Control-Allow-Origin': 'http://localhost:3000', 'Access-Control-Allow-Methods': 'POST', 'Access-Control-Allow-Headers': 'X-Requested-With,content-type', 'Access-Control-Allow-Credentials': 'true' } res.header(postHeader) // 方案2:如果要复用已有的扁平数组,循环逐个设置 const postHeader = [ 'Access-Control-Allow-Origin', 'http://localhost:3000', 'Access-Control-Allow-Methods', 'POST', 'Access-Control-Allow-Headers', 'X-Requested-With,content-type', 'Access-Control-Allow-Credentials', 'true' ] for (let i = 0; i < postHeader.length; i += 2) { res.header(postHeader[i], postHeader[i+1]) } // 响应返回直接用res.send即可,无需手动调用res.write和res.end res.send({ status: "Wrong password." })
你之前修改代码后问题修复的原因是:移除了res.header调用自然不会触发该方法的调用报错,同时res.send方法会自动处理响应头设置、内容写入、响应结束的全流程,不需要手动调用res.write和res.end。
内容的提问来源于stack exchange,提问作者Harrison
相关产品推荐
相关产品推荐

