Express tarafından sunulan komut dosyalarında etkinleştirilmek üzere CORS ayarlamam gerekiyor. Kamu / varlıklar için bu iade yanıtlarındaki başlıkları nasıl ayarlayabilirim?
Express tarafından sunulan komut dosyalarında etkinleştirilmek üzere CORS ayarlamam gerekiyor. Kamu / varlıklar için bu iade yanıtlarındaki başlıkları nasıl ayarlayabilirim?
Yanıtlar:
Express: cors'ta CORS işlemek için npm'de en az bir ara katman yazılımı vardır . [@mscdex yanıtına bakın]
ExpressJS DOC'den özel yanıt üstbilgileri nasıl ayarlanır?
res.set(field, [value])
Başlık alanını değere ayarla
res.set('Content-Type', 'text/plain');
veya aynı anda birden çok alan ayarlamak için bir nesneyi iletin.
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
Olarak takma adı
res.header(field, [value])
res.write('content')?
res.setbenim için işe yaramadı, ama corsara katman hile doğru yaptı.
Bu çok can sıkıcı.
Birisi hala sorun yaşıyorsa veya başka bir kütüphane eklemek istemiyorsa tamam. Tek yapmanız gereken bu orta eşya kod satırını rotalarınızdan önce yerleştirmektir.
Cors Örneği
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)=> {...});
Bunu cors kullanarak yapabilirsiniz. cors CORS yanıtınızı ele alacak
var cors = require('cors')
app.use(cors());
Ayrıca CORS üstbilgilerini eklemek için bir ara katman yazılımı da ekleyebilirsiniz.
/**
* 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'un cevabı doğru.
Ancak, başlığınızı başkaları tarafından erişilebilir hale getirmek için başka bir yanıt başlığı ayarlamanız gerekir.
Misal:
İlk olarak, yanıt başlığına 'sayfa boyutu' eklersiniz
response.set('page-size', 20);
Ardından, tek yapmanız gereken başlığınızı göstermek
response.set('Access-Control-Expose-Headers', 'page-size')
javascript res.set("...","..."); res.set("...","...."); Şimdi bu 2 başlığı nasıl açığa çıkarıyorsunuz?
javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
resnesneye ayarladım . Bu içeriği görmeye çalıştığımda tanımsız olarak kullanıyorumres.headers;