Мне нужно, чтобы CORS был включен для сценариев, обслуживаемых Express. Как я могу установить заголовки в этих возвращенных ответах для public / assets?
Мне нужно, чтобы CORS был включен для сценариев, обслуживаемых Express. Как я могу установить заголовки в этих возвращенных ответах для public / assets?
Ответы:
На npm имеется по крайней мере одно промежуточное программное обеспечение для обработки CORS в Express: cors . [см. ответ @mscdex]
Это как настроить пользовательские заголовки ответа из ExpressJS DOC
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])
res.write('content')
?
res.set
у меня ничего не вышло, но cors
промежуточное ПО сделало все правильно.
Это так раздражает.
Хорошо, если у кого-то все еще есть проблемы или он просто не хочет добавлять другую библиотеку. Все, что вам нужно сделать, это поместить эту промежуточную строку кода перед вашими маршрутами.
Пример Cors
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. Корс будет обрабатывать ваш ответ CORS
var cors = require('cors')
app.use(cors());
Вы также можете добавить промежуточное ПО для добавления заголовков 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();
}
};
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();
});
@ Клоде ответ правильный.
Однако вы должны установить другой заголовок ответа, чтобы сделать его доступным для других.
Пример:
Сначала вы добавляете «размер страницы» в заголовок ответа.
response.set('page-size', 20);
Затем все, что вам нужно сделать, это выставить свой заголовок
response.set('Access-Control-Expose-Headers', 'page-size')
javascript res.set("...","..."); res.set("...","....");
Вот так : Теперь, как вы выставляете эти 2 заголовка?
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
res
объекте. Когда я пытаюсь увидеть этот контент, я использую неопределенное использованиеres.headers
;