我需要将CORS设置为在由express提供的脚本上启用。我如何设置这些公共/资产返回的响应头?
当前回答
使用express.js 4.18.2的最新版本:
如果你正在使用静态中间件,并且想要改变响应头,你应该:
app.use(express.static('./', {
setHeaders: function(res) {
res.set("Content-Security-Policy", "default-src 'self'");
}
}));
其他回答
你也可以添加一个中间件来添加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();
}
};
npm中至少有一个中间件可以在Express中处理CORS: CORS。[见@mscdex answer]
这是如何设置自定义响应头,从ExpressJS DOC
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])
@klode的答案是正确的。
但是,您应该设置另一个响应标头以使其他人可以访问您的标头。
例子:
首先,在响应头中添加“page-size”
response.set('page-size', 20);
然后,你所需要做的就是暴露你的头文件
response.set('Access-Control-Expose-Headers', 'page-size')
使用express.js 4.18.2的最新版本:
如果你正在使用静态中间件,并且想要改变响应头,你应该:
app.use(express.static('./', {
setHeaders: function(res) {
res.set("Content-Security-Policy", "default-src 'self'");
}
}));
npm中至少有一个中间件可以在Express中处理CORS: CORS。
推荐文章
- 如何从javascript子类调用父方法?
- NPM清洁模块
- Javascript中Uint8Array的字符串
- 跨浏览器JavaScript(不是jQuery…)滚动到顶部动画
- 如何找到一个值的数组索引?
- 当内部元素滚动位置达到顶部/底部时,防止父元素的滚动?
- 在Node.js中加载基本HTML
- Node.js和CPU密集型请求
- val()和text()的区别
- 如何使用Jest测试对象键和值是否相等?
- 将长模板文字行换行为多行,而无需在字符串中创建新行
- 如何在JavaScript中映射/减少/过滤一个集?
- Bower: ENOGIT Git未安装或不在PATH中
- 为什么在节点REPL中没有定义__dirname ?
- 添加javascript选项选择