node.js中res.setHeader和res.header之间的差异

node.js中res.setHeader和res.header之间的差异,node.js,express,Node.js,Express,res.setHeader和res.header之间的区别是什么。启用CORS应使用哪一个?在某些页面中,res.header用于CORS,而res.setHeader用于CORS。res.setHeader()是Node.js的本机方法,res.header()是Express framework中res.set()方法的别名 文件: 这两个方法做的事情完全相同,设置HTTP响应的头。唯一的区别是res.setHeader()只允许设置单个头,res.header()允许设置多个头。 因此,请

res.setHeader和res.header之间的区别是什么。启用CORS应使用哪一个?在某些页面中,res.header用于CORS,而res.setHeader用于CORS。

res.setHeader()
是Node.js的本机方法,
res.header()
是Express framework中
res.set()
方法的别名

文件:

这两个方法做的事情完全相同,设置HTTP响应的头。唯一的区别是
res.setHeader()
只允许设置单个头
res.header()
允许设置多个头
因此,请使用适合您需要的一款。

也许一个例子可以更清楚地说明:

// single field is set 
res.setHeader('content-type', 'application/json');

// multiple files can be set
res.set({
     'content-type': 'application/json',
     'content-length': '100',
     'warning': "with content type charset encoding will be added by default"
  });

我将此代码用于我的平均堆栈项目。

除了高投票率答案之外,
set
是别名
header
,它调用
setHeader
来设置头。以下是源代码:

res.set =
res.header = function header(field, val) {
  if (arguments.length === 2) {
    var value = Array.isArray(val)
      ? val.map(String)
      : String(val);

    // add charset to content-type
    if (field.toLowerCase() === 'content-type') {
      if (Array.isArray(value)) {
        throw new TypeError('Content-Type cannot be set to an Array');
      }
      if (!charsetRegExp.test(value)) {
        var charset = mime.charsets.lookup(value.split(';')[0]);
        if (charset) value += '; charset=' + charset.toLowerCase();
      }
    }

    this.setHeader(field, value);
  } else {
    for (var key in field) {
      this.set(key, field[key]);
    }
  }
  return this;
};

另请参见GitHub

可能重复的我知道如何允许CORS。但在某些地方它写为res.header,而在某些地方写为res.setHeader.Note:在
setHeader
示例中应该是“逗号”而不是“冒号”。属性之间存在逗号。冒号(:)是javascript将值与其属性分离的一种方式。所以我知道这是对的。如果代码不起作用,请检查并告诉我。Thanks@Ghafoor但是节点的本机
res.setHeader
函数()获取两个参数(
name
value
,它们用逗号分隔)。您可能会将它与一个
对象
参数混淆(但即使这样,
{}
也会丢失)。TL;DR:结肠应该是一个逗号,但实际上并不正确
res.setHeader('X-Frame-Options','*')
将使用值
*
设置头
X-Frame-Options
,而
res.header('X-Frame-Options','*')
将使用值
*
设置头
X-Frame-Options
。但是,由于标题在技术上是不区分大小写的,所以在大多数情况下都可以。这并不能回答问题。谢谢。标题很有用。当做
res.set =
res.header = function header(field, val) {
  if (arguments.length === 2) {
    var value = Array.isArray(val)
      ? val.map(String)
      : String(val);

    // add charset to content-type
    if (field.toLowerCase() === 'content-type') {
      if (Array.isArray(value)) {
        throw new TypeError('Content-Type cannot be set to an Array');
      }
      if (!charsetRegExp.test(value)) {
        var charset = mime.charsets.lookup(value.split(';')[0]);
        if (charset) value += '; charset=' + charset.toLowerCase();
      }
    }

    this.setHeader(field, value);
  } else {
    for (var key in field) {
      this.set(key, field[key]);
    }
  }
  return this;
};