নোড.জেজে এক্সপ্রেস.জেএস ফ্রেমওয়ার্কে ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস) কীভাবে সক্ষম করবেন


101

আমি নোড.জেজে একটি ওয়েব সার্ভার তৈরি করার চেষ্টা করছি যা কোনও সার্বজনীন ডিরেক্টরি থেকে স্থির ফাইলগুলি সরবরাহ করার সময় ক্রস-ডোমেন স্ক্রিপ্টিং সমর্থন করবে। আমি এক্সপ্রেস.জেএস ব্যবহার করছি এবং ক্রস-ডোমেন স্ক্রিপ্টিং ( Access-Control-Allow-Origin: *) কীভাবে মঞ্জুরি দেওয়া যায় তা নিশ্চিত নয় ।

আমি এই পোস্টটি দেখেছি , যা আমি সহায়ক বলে মনে করি না।

var express = require('express')
  , app = express.createServer();

app.get('/', function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

app.configure(function () {
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(app.router);
});

app.configure('development', function () {

    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function () {


    var oneYear = 31557600000;
    //    app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler());
});

app.listen(8888);
console.log('express running at http://localhost:%d', 8888);

অ্যাপ্লিকেশনটি দেখুন vs সমস্ত বনাম অ্যাপ্লিকেশন get জিইটি না হওয়ার
বিকল্পগুলির

দেখতে স্থানীয় ওয়েবসার্ভার যা CORS সমর্থন একটি সহজ নোডের স্ট্যাটিক ওয়েবসার্ভার একটি উদাহরণ জন্য
লয়েড

আরও তথ্যের জন্য সক্ষম-cors.org/server_apache.html দেখুন
মোস্তফা

উত্তর:


159

সক্ষম কর্স.অর্গ.অর্গ থেকে উদাহরণটি দেখুন :

নোড.জেজে আপনার এক্সপ্রেসজেএস অ্যাপে আপনার রুটগুলি সহ নিম্নলিখিতটি করুন:

app.all('/', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
 });

app.get('/', function(req, res, next) {
  // Handle the get for this route
});

app.post('/', function(req, res, next) {
 // Handle the post for this route
});

app.allআপনার অ্যাপের অন্যান্য সমস্ত রুটের আগে প্রথম কল ( ) করা উচিত (বা কমপক্ষে আপনি CORS সক্ষম হতে চান)।

[সম্পাদনা]

আপনি যদি চাইছেন যে শিরোনামগুলি স্থির ফাইলগুলির জন্যও প্রদর্শিত হয়, তবে এটি চেষ্টা করে দেখুন (কল করার আগে এটি নিশ্চিত করুন use(express.static()):

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  next();
});

আমি এটি আপনার কোড দিয়ে পরীক্ষা করেছি এবং publicডিরেক্টরি থেকে সম্পদের উপর শিরোনাম পেয়েছি :

var express = require('express')
  , app = express.createServer();

app.configure(function () {
    app.use(express.methodOverride());
    app.use(express.bodyParser());
    app.use(function(req, res, next) {
      res.header("Access-Control-Allow-Origin", "*");
      res.header("Access-Control-Allow-Headers", "X-Requested-With");
      next();
    });
    app.use(app.router);
});

app.configure('development', function () {
    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function () {
    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler());
});

app.listen(8888);
console.log('express running at http://localhost:%d', 8888);

আপনি অবশ্যই ফাংশনটিকে একটি মডিউলে প্যাকেজ করতে পারেন যাতে আপনি এর মতো কিছু করতে পারেন

// cors.js

module.exports = function() {
  return function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
  };
}

// server.js

cors = require('./cors');
app.use(cors());

আরে, আপনার প্রতিক্রিয়া জন্য ধন্যবাদ। আপনার পরামর্শ অনুসারে আমি তা করেছি (প্রথম অংশ, তবে এখনও অনুরোধ শিরোনামগুলিতে কোনও আলাদা দেখতে পাচ্ছি না) আমি আমার বর্তমান কোডটি উপরে উপরে সংযুক্ত করেছি। আমি কীভাবে আপনার বাকী সমাধানটি সংহত করতে পারি তা আপনি ব্যাখ্যা করতে পারেন?
গাই

1
আমি যে বিস্মিত করছি, যেহেতু আপনি করছেন useing app.routerআগে express.staticএটি স্ট্যাটিক ফাইল হেডার পরিবর্তন করে না; যাই হোক না কেন, আমি আমার উত্তর আপডেট করেছি যাতে এটি কার্যকর হয়।
মিশেল টিলি

ধন্যবাদ! আমি দেখছি আপনি ঠিক বলেছেন। সার্ভার থেকে প্রাপ্ত সম্পদগুলি অনুরোধকৃত শিরোনামগুলির সাথে থাকে। আমি আমার আসল বিষয়টি সম্পর্কে পরিষ্কার হতে পারি না। আমি get কমান্ড সহ একটি বাহ্যিক সার্ভারে একটি API কল করার চেষ্টা করছি। এবং সেখানেই আমি ত্রুটিটি পেয়েছি: এক্সএমএলএইচটিপিআরকোয়েস্ট SomeURL.com লোড করতে পারে না । মূল লোকালহোস্ট: 8888 অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স দ্বারা অনুমোদিত নয়।
গাই

আমার ভুল বোঝাবুঝি হতে পারে। আপনি কি SOMEURL.com এ সার্ভারের নিয়ন্ত্রণে আছেন?
মিশেল টিলি

দুঃখিত আমি এখন আপনার উত্তর সম্পূর্ণরূপে বুঝতে। অনেক ধন্যবাদ. আমি আপনার সাহায্যের প্রশংসা করি :)
গাই

58

@ মিশেল টিলে সমাধান অনুসরণ করে, সম্ভবত আমার পক্ষে এটি প্রথমে কার্যকর হয়নি। কেন নিশ্চিত নয়, সম্ভবত আমি ক্রোম এবং নোডের বিভিন্ন সংস্করণ ব্যবহার করছি। কিছু ছোটখাটো টুইট করার পরে এটি এখন আমার পক্ষে কাজ করছে।

app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

যদি কেউ আমার মতো একই সমস্যার মুখোমুখি হয় তবে এটি সহায়ক হতে পারে।


অ্যাপ্লিকেশনটি দেখুন vs সমস্ত বনাম অ্যাপ্লিকেশন get জিইটি না করার
বিকল্পগুলির

এটি আমার জন্য কাজ করে (আমি ব্যাকবোন ব্যবহার করে জিনিসগুলি আনছি)। আমি IE 8 এ কাজ করবে কিনা তা জানার চেষ্টা করছি ... মনে হচ্ছে এটি হওয়া উচিত, তবে আমি জানি না এই "এক্সডোমেনআরেকুইস্ট" জিনিসটির জন্য বিশেষ কিছুর প্রয়োজন আছে কিনা ... ডেভেলপার.মোজিলা.আর.অর্গ- মার্কিন / ডকস / এইচটিটিপি /…
অ্যাডাম প্রেমের

ভবিষ্যতের ব্যবহারকারীর জন্য কিছু তথ্য: আমি আমার ডোমেন নামটি হিরকু রেপোতে আবার পরিচালনা করছি যার কারণেই আমি এই সমস্যাটিতে চলে আসছি। যাইহোক, প্রথম উত্তরটি স্থানীয়ভাবে কাজ করেছিল তবে আমি এটিকে হিরকুতে ঠেকানোর পরে নয়। তবে এই উত্তরটি হিরকুকে ঠেকানোর পরে কাজ করেছিল।
ক্রিস হলেনবেক

@ ক্রিসহোলেনবেক এই হিরকুতে আমার পক্ষে কাজ করে না, আপনি অন্য কিছু করেছেন?
বেন ক্রেগ

@ বেনক্রাইগ, না, তবে এটি প্রথম চেষ্টা করার পরে আমার পক্ষে কাজ করা বন্ধ করে দিয়েছে। সুতরাং আমি আসলে এখনও এই সমস্যাটি করছি।
ক্রিস হলেনবেক

11

এই চেষ্টা Cors npm মডিউল।

var cors = require('cors')

var app = express()
app.use(cors())

এই মডিউলটি সুরক্ষিত সুরগুলি যেমন ডোমেন শ্বেত তালিকাভুক্তকরণ, নির্দিষ্ট এপিআইএসের জন্য কর সক্ষমকরণ ইত্যাদির জন্য অনেকগুলি বৈশিষ্ট্য সরবরাহ করে


2

আমি এটি ব্যবহার:

var app = express();

app
.use(function(req, res, next){
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Headers', 'X-Requested-With');
    next();
})
.options('*', function(req, res, next){
    res.end();
})
;

h.readFiles('controllers').forEach(function(file){
  require('./controllers/' + file)(app);
})
;

app.listen(port);
console.log('server listening on port ' + port);

এই কোডটি ধরে নিয়েছে যে আপনার নিয়ামকগুলি নিয়ন্ত্রণকারী ডিরেক্টরিতে অবস্থিত। এই ডিরেক্টরিতে প্রতিটি ফাইলের কিছু হওয়া উচিত:

module.exports = function(app){

    app.get('/', function(req, res, next){
        res.end('hi');
    });

}

1

কর্স এক্সপ্রেস মডিউলটি ব্যবহার করার পরামর্শ দিন । এটি আপনাকে ডোমেনগুলি হোয়াইটলিস্ট করতে, বিশেষভাবে রুট ইত্যাদিতে ডোমেনগুলিকে অনুমতি / সীমাবদ্ধ করতে দেয়,


0

আপনি অবশ্যই Access-Control-Allow-Credentials: true"কুকি" ব্যবহার করতে চাইলে অবশ্যই সেট করতে হবে "শংসাপত্রগুলি"

app.all('*', function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

0
app.use(function(req, res, next) {
var allowedOrigins = [
  "http://localhost:4200"
];
var origin = req.headers.origin;
console.log(origin)
console.log(allowedOrigins.indexOf(origin) > -1)
// Website you wish to allow to
if (allowedOrigins.indexOf(origin) > -1) {
  res.setHeader("Access-Control-Allow-Origin", origin);
}

// res.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");

// Request methods you wish to allow
res.setHeader(
  "Access-Control-Allow-Methods",
  "GET, POST, OPTIONS, PUT, PATCH, DELETE"
);

// Request headers you wish to allow
res.setHeader(
  "Access-Control-Allow-Headers",
  "X-Requested-With,content-type,Authorization"
);

// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader("Access-Control-Allow-Credentials", true);

// Pass to next layer of middleware
next();

});

আপনার index.js বা server.js ফাইলে এই কোডটি যুক্ত করুন এবং আপনার প্রয়োজন অনুযায়ী অনুমোদিত উত্স অ্যারে পরিবর্তন করুন।


-6

আমার আরও একটি পদক্ষেপ নিতে হবে যা ছিল আমার URL থেকে স্যুইচ http://localhostকরাhttp://127.0.0.0


আপনার নির্দেশনা কি?
অস্পষ্টতম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.