我需要在express提供的脚本中启用CORS。如何在返回的响应中设置这些头文件以用于public/assets?
我需要在express提供的脚本中启用CORS。如何在返回的响应中设置这些头文件以用于public/assets?
我需要在express提供的脚本中启用CORS。如何在返回的响应中设置这些头文件以用于public/assets?
在npm上至少有一个中间件可用于处理Express中的CORS: cors。[请参阅@mscdex的回答]
以下是从ExpressJS文档中设置自定义响应标头的方法。
res.set(field, [value])
将标题字段设置为值
res.set('Content-Type', 'text/plain');
或者传递一个对象以一次性设置多个字段。
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
别名为
res.header(field, [value])
这真是令人恼火。
好的,如果有任何人仍然存在问题或者不想添加其他库。您只需要在路由之前放置这个中间件代码行。
跨域示例
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)=> {...});
简短回答:
res.setHeaders
- 调用原生的 Node.js 方法
res.set
- 设置头信息
res.headers
- 别名为 res.set
你可以通过使用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')
res.set("...","...");
res.set("...","....");
现在你该如何暴露这两个头部信息? - CursorAccess-Control-Expose-Headers: *
// 或者
Access-Control-Expose-Headers: , , ...
(翻译注释:这是一个HTTP响应头的设置,用于指定允许客户端访问哪些在响应中暴露的header信息。第一行中的星号表示允许所有header信息被访问,第二行则通过逗号分隔指定具体可访问的header名称。) - Cursorservice.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();
});
/**
* 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();
}
};
首先在响应头中添加“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'");
}
}));
res
对象中设置这些值的。当我尝试查看此内容时,使用res.headers
会返回未定义。 - Bruno Casalires.write('content')
吗? - Georgeres.set
对我不起作用,但cors
中间件正好解决了问题。 - Cezar D.