Muszę ustawić CORS, aby był włączony w skryptach obsługiwanych przez Express. Jak mogę ustawić nagłówki w tych zwróconych odpowiedziach dla publicznych / zasobów?
Muszę ustawić CORS, aby był włączony w skryptach obsługiwanych przez Express. Jak mogę ustawić nagłówki w tych zwróconych odpowiedziach dla publicznych / zasobów?
Odpowiedzi:
Na npm istnieje co najmniej jedno oprogramowanie pośredniczące do obsługi CORS w Express: cors . [patrz odpowiedź @mscdex]
Oto jak ustawić niestandardowe nagłówki odpowiedzi z pliku DOC ExpressJS
res.set(field, [value])
Ustaw pole nagłówka na wartość
res.set('Content-Type', 'text/plain');
lub przekazać obiekt, aby ustawić wiele pól jednocześnie.
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
Z aliasem
res.header(field, [value])
res.write('content')
?
res.set
nie działało dla mnie, ale cors
oprogramowanie pośredniczące zrobiło to dobrze.
To jest takie irytujące.
OK, jeśli ktoś nadal ma problemy lub po prostu nie chce dodawać kolejnej biblioteki. Wszystko, co musisz zrobić, to umieścić tę środkową linię kodu przed trasami.
Przykład 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)=> {...});
Możesz to zrobić za pomocą cors. cors zajmie się twoją odpowiedzią CORS
var cors = require('cors')
app.use(cors());
Możesz również dodać oprogramowanie pośredniczące, aby dodać nagłówki CORS, coś takiego zadziała:
/**
* 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();
});
Odpowiedź @ klode jest prawidłowa.
Jednak powinieneś ustawić inny nagłówek odpowiedzi, aby twój nagłówek był dostępny dla innych.
Przykład:
Najpierw dodajesz „rozmiar strony” w nagłówku odpowiedzi
response.set('page-size', 20);
Następnie wszystko, co musisz zrobić, to ujawnić swój nagłówek
response.set('Access-Control-Expose-Headers', 'page-size')
javascript res.set("...","..."); res.set("...","....");
Jak teraz ujawnić te 2 nagłówki?
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
res
obiekcie. Kiedy próbuję zobaczyć tę zawartość, nieokreślony używającres.headers
;