express - 类型错误:res.set 不是函数
问题描述
我试图修改我的标头请求,但看起来请求对象没有“set”方法
var shortid = require("shortid");
// To generate a unique ID, use shortid.generate()
module.exports = (req, res, next) => {
req.trace = {
id: shortid.generate(),
path: "/tasks",
timestamp: new Date().getTime(),
};
res.headers = {};
res.headers["x-request-id"] = req.trace.id;
// NOT WORKING IDK WHY
//res.set("x-request-id", req.trace.id);
next();
};
问题
TypeError: res.set is not a function
呼叫于
app.use("/omega", middleware, omegaRouter);
解决方案
在 Express 代码中,res.set()
和res.header()
是彼此的别名:
res.set =
res.header = function header(field, val) {
if (arguments.length === 2) {
var value = Array.isArray(val)
? val.map(String)
: String(val);
....
正如您在Express 源代码中看到的那样。
当您的代码执行此操作时:
res.headers = {};
您正在覆盖并弄乱 Express 方法。如果删除这两行代码:
res.headers = {};
res.headers["x-request-id"] = req.trace.id;
然后,你的这一行:
res.set("x-request-id", req.trace.id);
应该可以正常工作。
目前尚不清楚您试图对访问的两行代码做什么,res.headers
因为这应该是一种方法,而不是您可以设置的属性。
推荐阅读
- java - java.lang.NoClassDefFoundError Jersey 项目导入另一个项目时
- javascript - Next.js 是否具有与 Nuxt.js 相同的自动注册功能?
- node.js - 传递一个 Button 值并更新数据库
- java - 从 Springboot Websocket Java Client 增加输出缓冲区
- django - Raspberry 启动 django 应用程序,同时通过 eth0 直接连接到 PC
- binding - 如何在 Vue 3 中访问 binding.expression?
- python - CUML:无法在多 GPU Dask 集群上训练随机森林模型
- python - 更改 kivy.label 的 selected 属性
- maven - 如何将项目的发布版本存储在特定属性中?
- java - 为时间戳添加 5 秒的 JUnit 测试:没有为参数 [object] 注册 ParameterResolver