微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

类型错误:res.set 不是函数

如何解决类型错误:res.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 source code 中看到的那样。

当您的代码执行此操作时:

res.headers = {};

您正在覆盖并弄乱 Express 方法。如果去掉这两行代码:

res.headers = {};
res.headers["x-request-id"] = req.trace.id;

那么,你的这一行:

res.set("x-request-id",req.trace.id);

应该可以正常工作。

不清楚您试图对访问 res.headers 的两行代码做什么,因为它应该是一种方法,而不是您可以设置的属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。