如何在ExpressJS中使用多个HttpHeader(具有相同名称)

时间:2016-01-07 20:07:51

标签: php node.js http express

我的Php代码可以发送两个具有相同名称的标头,在php第二个参数是用于替换或覆盖。但在ExpressJS中,res.header与php代码不同 PHP代码:

header("Link: <http://$prefetch_next_img>; rel=prefetch",false); 
header("Link: <http://$prefetch_next_img2>; rel=prefetch",false);  

http://us2.php.net/manual/en/function.header.php

ExpressJS(NodeJS):

res.header('Link','Fake Value');
res.header('Link','Only Send it'); // previous header replaced

1 个答案:

答案 0 :(得分:4)

最终,您需要传递一个数组来为同一个标头设置多个值

res.header('Set-Cookie', ['foo', 'bar']);

查看response library表示我们可以看到以下示例:

/**
 * Set header `field` to `val`, or pass
 * an object of header fields.
 *
 * Examples:
 *
 *    res.set('Foo', ['bar', 'baz']);
 *    res.set('Accept', 'application/json');
 *    res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' });
 *
 * Aliased as `res.header()`.
 *
 * @param {String|Object} field
 * @param {String|Array} val
 * @return {ServerResponse} for chaining
 * @public
 */

深入研究代码向我们展示了这只是节点response.setHeader()的代理,它遵循相同的格式

  

为隐式标头设置单个标头值。如果这个标题   已存在于待发送标头中,其值将被替换。   如果需要发送多个标头,请在此处使用字符串数组   同名。

response.setHeader('Set-Cookie', ['type=ninja', 'language=javascript']);