मैं एक्सप्रेस.जेएस परिसंपत्तियों पर प्रतिक्रिया हेडर कैसे सेट कर सकता हूं


164

एक्सप्रेस द्वारा प्रदान की जाने वाली लिपियों पर सक्षम होने के लिए मुझे CORS सेट करना होगा। मैं सार्वजनिक / परिसंपत्तियों के लिए इन लौटी प्रतिक्रियाओं में हेडर कैसे सेट कर सकता हूं?

जवाबों:


358

एक्सप्रेस: कोर में हैंडलिंग के लिए npm पर कम से कम एक मिडलवेयर है । [देखें @mscdex उत्तर]

यह एक्सप्रेसजेएस डीओसी से कस्टम रिस्पांस हेडर सेट करने का तरीका है

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ऑब्जेक्ट में सेट किया है। जब मैं इस सामग्री को देखने की कोशिश करता हूं तो मैं अपरिभाषित हो जाता हूं res.headers;
ब्रूनो कासली

तब मैं उपयोग करता हूं res.write('content')?
जॉर्ज

1
इस पंक्ति का उपयोग सिर लिखने से पहले किया जाना चाहिए।
वीरेंद्र सिंह राठौर 16

किसी कारण से res.setमेरे लिए काम नहीं किया, लेकिन corsमिडिलवेयर ने ठीक ही किया।
सेज़र डी।

@BrunoCasali अतिरिक्त हेडर डिफ़ॉल्ट रूप से ब्राउज़र द्वारा ब्लॉक किए जाते हैं, देखें stackoverflow.com/a/37931084/1507207
sbk201

48

यह कितना कष्टप्रद है।

ठीक है अगर किसी को अभी भी समस्या हो रही है या सिर्फ एक और पुस्तकालय जोड़ना नहीं चाहता है। आपको बस अपने मार्गों से पहले कोड के इस मध्य वेयर लाइन को रखना होगा।

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)=> {...});

1
आदेश के सापेक्ष यह बिंदु महत्वपूर्ण है। मैं सोच रहा था कि क्या वास्तव में यह महत्वपूर्ण था क्योंकि मैंने इसे बदलते समय विभिन्न व्यवहारों को देखा था। अच्छा लगा। साभार
एलेजांद्रो टेइसीरा मुअनोज़

1
अच्छा: समस्या को पूरी तरह से हल किया। कोड की इन 6 लाइनों को करने के लिए एक पूरी निर्भरता को जोड़ना एक सड़क नहीं है जिसे मैं किसी के लिए सुझाऊंगा ...
एलेक्स क्लार्क

11

आप इसे कॉर्स का उपयोग करके कर सकते हैं। cors आपकी CORS प्रतिक्रिया को हैंडल करेगा

var cors = require('cors')

app.use(cors());

10

संक्षिप्त जवाब:

  • res.setHeaders - देशी Node.js विधि को कॉल करता है

  • res.set - हेडर सेट करता है

  • res.headers - एक उपनाम के लिए res.set


9

एक्सप्रेस: कोर में हैंडलिंग के लिए npm पर कम से कम एक मिडलवेयर है ।


7

आप एक मिडलवेयर भी जोड़ सकते हैं कि कॉर्स हेडर जोड़ने के लिए, कुछ इस तरह से काम करेगा:

/**
 * 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();
    }
};

4

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();
  });


3

@ क्लोड का जवाब सही है।

हालाँकि, आप अपने हेडर को दूसरों के लिए सुलभ बनाने के लिए एक और प्रतिक्रिया हेडर सेट करने वाले हैं।


उदाहरण:

सबसे पहले, आप प्रतिक्रिया शीर्षक में 'पृष्ठ-आकार' जोड़ते हैं

response.set('page-size', 20);

फिर, आपको बस अपने हेडर को उजागर करना है

response.set('Access-Control-Expose-Headers', 'page-size')

मैं एक घंटे से अधिक समय से यह जानने की कोशिश कर रहा था कि मेरे कस्टम हेडर में से कोई भी इसे दूसरे छोर पर क्यों नहीं बना रहा है। उन्हें एक्सपोज़ करना जवाब था। आपको बहुत - बहुत धन्यवाद! क्यों इस हेडर में एक्सप्रेस डॉक्स में शून्य उल्लेख है (या किसी भी लेख में मैंने इस प्रकार कस्टम हेडर के बारे में अब तक पढ़ा है) बहुत हैरान करने वाला है।
डेविन स्पाइकोव्स्की

क्या होगा अगर आपके पास 2 हेडर थे? इस तरह: javascript res.set("...","..."); res.set("...","...."); अब आप उन 2 हेडर को कैसे उजागर करते हैं?
कर्सर

मुझे पता चला कि डॉक्स को कैसे पढ़ा जाता है:javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
Cursor
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.