Saya perlu mengatur CORS agar diaktifkan pada skrip yang dilayani oleh express. Bagaimana saya bisa mengatur header dalam respons yang dikembalikan untuk publik / aset ini?
Saya perlu mengatur CORS agar diaktifkan pada skrip yang dilayani oleh express. Bagaimana saya bisa mengatur header dalam respons yang dikembalikan untuk publik / aset ini?
Jawaban:
Setidaknya ada satu middleware di npm untuk menangani CORS di Express: cors . [lihat jawaban @mscdex]
Ini adalah cara mengatur header respons khusus, dari ExpressJS DOC
res.set(field, [value])
Setel bidang tajuk ke nilai
res.set('Content-Type', 'text/plain');
atau meneruskan objek untuk mengatur beberapa bidang sekaligus.
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
Diasingkan sebagai
res.header(field, [value])
res.write('content')
?
res.set
tidak berhasil bagi saya, tetapi cors
middleware melakukan trik dengan benar.
Ini sangat menjengkelkan.
Oke jika ada yang masih mengalami masalah atau tidak ingin menambahkan perpustakaan lain. Yang harus Anda lakukan adalah menempatkan baris kode ware tengah ini sebelum rute Anda.
Contoh 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)=> {...});
Anda dapat melakukan ini dengan menggunakan kor. cors akan menangani respons CORS Anda
var cors = require('cors')
app.use(cors());
Anda juga dapat menambahkan middleware untuk menambahkan header CORS, sesuatu seperti ini akan berfungsi:
/**
* 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();
});
Jawaban @ klode benar.
Namun, Anda harus mengatur tajuk respons lain agar tajuk Anda dapat diakses orang lain.
Contoh:
Pertama, Anda menambahkan 'ukuran halaman' di header respons
response.set('page-size', 20);
Kemudian, yang perlu Anda lakukan adalah mengekspos tajuk Anda
response.set('Access-Control-Expose-Headers', 'page-size')
javascript res.set("...","..."); res.set("...","....");
Sekarang bagaimana Anda mengekspos 2 header itu?
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
res
objek. Ketika saya mencoba melihat konten ini saya tidak menggunakanres.headers
;