Мені потрібно встановити CORS, щоб увімкнено сценарії, які обслуговуються експресом. Як я можу встановити заголовки у цих повернених відповідях для публікацій / активів?
Мені потрібно встановити CORS, щоб увімкнено сценарії, які обслуговуються експресом. Як я можу встановити заголовки у цих повернених відповідях для публікацій / активів?
Відповіді:
Існує щонайменше одне проміжне програмне забезпечення на 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
прошивка зробила трюк як раз.
Це так дратує.
Добре, якщо хтось все ще має проблеми або просто не хоче додавати іншу бібліотеку. Все, що вам потрібно зробити, - це розмістити цей середній рядок коду до своїх маршрутів.
Приклад Корса
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();
});
@ klode відповідь правильна.
Однак ви повинні встановити інший заголовок відповіді, щоб зробити його заголовком доступним для інших.
Приклад:
Спочатку ви додаєте "розмір сторінки" у заголовок відповіді
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
;