首页 > 解决方案 > 类型错误: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

解决方案


在 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因为这应该是一种方法,而不是您可以设置的属性。


推荐阅读