如何在express.js资产上设置响应头

我需要将CORS设置为在由express提供的脚本上启用。我如何设置这些公共/资产返回的响应头?

368684 次浏览

npm中至少有一个中间件用于处理Express中的CORS: 歌珥。[见@mscdex answer]

这是如何设置自定义响应头,从ExpressJS医生

res.set(field, [value])

将报头字段设置为value

res.set('Content-Type', 'text/plain');

或者传递一个对象一次设置多个字段。

res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})

混叠

res.header(field, [value])

npm中至少有一个中间件用于处理Express中的CORS: 歌珥

您可以使用cors来做到这一点。cors将处理您的cors回复

var cors = require('cors')


app.use(cors());

@klode的答案是正确的。

但是,您应该设置另一个响应标头以使其他人可以访问您的标头。


例子:

首先,在响应头中添加“page-size”

response.set('page-size', 20);

然后,你所需要做的就是暴露你的头文件

response.set('Access-Control-Expose-Headers', 'page-size')

这太烦人了。

好的,如果有人仍然有问题或只是不想添加另一个库。你所要做的就是把这个中间件代码行放在你的路由之前。

歌珥的例子

app.use((req, res, next) => {
res.append('Access-Control-Allow-Origin', ['*']);
res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.append('Access-Control-Allow-Headers', 'Content-Type');
next();
});


// Express routes
app.get('/api/examples', (req, res)=> {...});

你也可以添加一个中间件来添加CORS头,像这样就可以了:

/**
* Adds CORS headers to the response
*
* {@link https://en.wikipedia.org/wiki/Cross-origin_resource_sharing}
* {@link http://expressjs.com/en/4x/api.html#res.set}
* @param {object} request the Request object
* @param {object} response the Response object
* @param {function} next function to continue execution
* @returns {void}
* @example
* <code>
* const express = require('express');
* const corsHeaders = require('./middleware/cors-headers');
*
* const app = express();
* app.use(corsHeaders);
* </code>
*/
module.exports = (request, response, next) => {
// http://expressjs.com/en/4x/api.html#res.set
response.set({
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'DELETE,GET,PATCH,POST,PUT',
'Access-Control-Allow-Headers': 'Content-Type,Authorization'
});


// intercept OPTIONS method
if(request.method === 'OPTIONS') {
response.send(200);
} else {
next();
}
};

简短的回答:

  • res.setHeaders -调用本机Node.js方法

  • res.set设置头文件

  • res.headers - res.set的别名

service.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
next();
});

首先在响应头中添加“field”

response.set('field', 'value');

然后你要做的就是暴露你的头文件

response.set('Access-Control-Expose-Headers', 'field')

使用express.js 4.18.2的最新版本:

如果你正在使用static中间件,并且想要改变响应头,你应该:

app.use(express.static('./', {
setHeaders: function(res) {
res.set("Content-Security-Policy", "default-src 'self'");
}
}));