আমি কীভাবে এক্সপ্রেস.জেএস এর সম্পদের উপর প্রতিক্রিয়া শিরোনাম সেট করতে পারি


164

এক্সপ্রেস দ্বারা পরিবেশন করা স্ক্রিপ্টগুলিতে সক্ষম হওয়ার জন্য আমাকে সিওআর সেট করতে হবে। আমি কীভাবে সর্বজনীন / সম্পত্তির জন্য ফিরে আসা প্রতিক্রিয়াগুলিতে শিরোনাম সেট করতে পারি?

উত্তর:


358

আছে: এক্সপ্রেসে CORS পরিচালনা করার জন্য npm উপর অন্তত একটি মিডলওয়্যার হয় Cors । [@ এসএমসিডেক্স উত্তর দেখুন]

এক্সপ্রেসজেএস ডক থেকে কাস্টম প্রতিক্রিয়া শিরোনামগুলি এভাবে সেট করা যায়

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;
ব্রুনো ক্যাসালি 17

তাহলে আমি কি ব্যবহার করব res.write('content')?
জর্জি

1
এই লাইনটি মাথা লেখার আগে ব্যবহার করা উচিত।
বীরেন্দ্র সিং রাঠোর

কোনও কারণে res.setআমার পক্ষে কাজ করেনি, তবে corsমিডলওয়্যারটি কৌশলটি ঠিক সঠিকভাবে করেছে।
সেজার ডি

@BrunoCasali অতিরিক্ত হেডার ডিফল্টরূপে ব্রাউজার দ্বারা অবরুদ্ধ রয়েছে, দেখতে stackoverflow.com/a/37931084/1507207
sbk201

48

এটি তাই বিরক্তিকর।

ঠিক আছে কারও যদি এখনও সমস্যা হয় বা কেবল অন্য লাইব্রেরি যুক্ত করতে না চায়। আপনাকে যা করতে হবে তা হ'ল আপনার রুটের আগে কোডের এই মাঝারি ওয়্যার লাইনটি স্থাপন করা।

কর উদাহরণ

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 প্রতিক্রিয়া পরিচালনা করবে

var cors = require('cors')

app.use(cors());

10

সংক্ষিপ্ত উত্তর:

  • res.setHeaders - স্থানীয় নেড.জেএস পদ্ধতিতে কল করে

  • res.set - শিরোনাম সেট করে

  • res.headers - পুনরায় সেট করার জন্য একটি উপাধি


9

আছে: এক্সপ্রেসে CORS পরিচালনা করার জন্য npm উপর অন্তত একটি মিডলওয়্যার হয় Cors


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')

আমি আমার কাস্টম শিরোনামগুলির কেন অন্য প্রান্তে তৈরি করছিলাম না তা জানার চেষ্টা করে এক ঘন্টা ধরে আটকে ছিলাম। তাদের প্রকাশ করা উত্তর ছিল। তোমাকে অনেক ধন্যবাদ! এক্সপ্রেস ডক্সে এই শিরোনামটির কেন শূন্য উল্লেখ রয়েছে (বা কাস্টম শিরোনাম সম্পর্কে আমি এতদূর পড়েছি এমন কোনও নিবন্ধে) খুব চমকপ্রদ।
ডেভিন স্পিকোভস্কি 31'18

আপনার যদি 2 হেডার থাকে? এটির মতো: javascript res.set("...","..."); res.set("...","...."); এখন আপনি কীভাবে এই 2 টি শিরোনামটি প্রকাশ করবেন?
কার্সার

আমি কীভাবে দস্তাবেজগুলি পড়ছি তা আবিষ্কার করেছি:javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
কার্সার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.