ฉันต้องตั้งค่า CORS ให้เปิดใช้งานสคริปต์ที่ให้บริการโดยด่วน ฉันจะตั้งค่าส่วนหัวในการตอบกลับที่ส่งคืนสำหรับสาธารณะ / เนื้อหาได้อย่างไร
ฉันต้องตั้งค่า CORS ให้เปิดใช้งานสคริปต์ที่ให้บริการโดยด่วน ฉันจะตั้งค่าส่วนหัวในการตอบกลับที่ส่งคืนสำหรับสาธารณะ / เนื้อหาได้อย่างไร
คำตอบ:
มีอย่างน้อยหนึ่งตัวกลางใน NPM สำหรับการจัดการล ธ in Express: ล ธ [ดู @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 จะจัดการกับคำตอบ CORS ของคุณ
var cors = require('cors')
app.use(cors());
คำตอบสั้น ๆ :
res.setHeaders
- เรียกเมธอด Node.js ดั้งเดิม
res.set
- ตั้งค่าส่วนหัว
res.headers
- นามแฝงที่จะ res.set
คุณสามารถเพิ่มมิดเดิลแวร์เพื่อเพิ่มส่วนหัว 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("...","....");
คุณจะแสดงส่วนหัวทั้งสองเหล่านี้อย่างไร
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
res
วัตถุ เมื่อฉันลองดูเนื้อหานี้ฉันไม่ได้กำหนดโดยใช้res.headers
;