node.js中res.setHeader和res.header之间的区别

Sub*_*ham 19 node.js express

res.setHeader和res.header有什么区别.哪一个应该用于启用CORS?在某些页面中使用了res.header,并且一些页面res.setHeader用于CORS.

Zag*_*ine 42

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

文档:res.setHeader(), res.set()

这两种方法完全相同,设置标头HTTP响应.唯一的区别是res.setHeader()允许您只设置一个单一的标题,res.header()并允许您设置多个标题.所以请使用符合您需求的产品.

  • 这实际上并不正确.`res.setHeader('X-Frame-Options','*')`将设置标题`X-Frame-Options`,其值为`*`,而`res.header('X-Frame-Options','*')`将设置一个带有值'*`的标题`x-frame-options`.但是,由于标头在技术上不区分大小写,因此在大多数情况下都应该没问题. (6认同)

小智 15

也许一个例子可以澄清更多:

// 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"
  });
Run Code Online (Sandbox Code Playgroud)

  • 注意:上面的`setHeader`示例中应该是"逗号"而不是"冒号" (3认同)
  • @Ghafoor但节点的本机`res.setHeader`函数(https://nodejs.org/docs/v0.4.0/api/http.html#response.setHeader)得到两个参数(`name`,`value`,它们是分开的用逗号).你可能会把它与一个`object`参数混淆(但即使这样,`{}`也会丢失).TL; DR:冒号应该是逗号 (2认同)

Pyl*_*lon 5

除了高投票的答案,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;
};
Run Code Online (Sandbox Code Playgroud)

另请参阅此处的GitHub