এক্সপ্রেস.জেএস - অ্যাপ্লিকেশন.লাইসেট সার্ভার.লাইস্টেন


439

এটি একটি খুব বেসিক প্রশ্ন হতে পারে তবে আমি কেবল এটি পাই না। এক্সপ্রেস.জেএস ব্যবহার করে অ্যাপ্লিকেশন তৈরি এবং 1234 পোর্টে অ্যাপ্লিকেশন শোনার মধ্যে পার্থক্য কী , উদাহরণস্বরূপ:

var express = require('express');
var app = express();

//app.configure, app.use etc

app.listen(1234);

এবং একটি HTTP সার্ভার যুক্ত করা হচ্ছে:

var express = require('express');
var http = require('http');

var app = express();
var server = http.createServer(app);

//app.configure, app.use etc

server.listen(1234);

পার্থক্য কি?
আমি যদি নেভিগেট করি http://localhost:1234, সুতরাং আমি একই আউটপুট পাই।


25
কিছুক্ষণের জন্য আমি নিজেই এটি ভাবছিলাম ... ভাল প্রশ্ন!
স্টিজন ডি উইট

2
আমি বুঝতে পারি যে এই প্রশ্নটি পুরানো তবে আমি নোট রাখতে চাই, ক্রিয়েট সার্ভার অবমূল্যায়ন করা হয়েছে।
ফিলিপ কির্কব্রাইড

@ ফিলিপকিরকব্রাইড আপনি, দয়া করে প্রমাণ দিতে পারবেন?
ইয়ানোট

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

উত্তর:


562

দ্বিতীয় রূপটি (আপনার জন্য একটি এক্সপ্রেস তৈরির পরিবর্তে নিজে একটি HTTP সার্ভার তৈরি করা) দরকারী যদি আপনি HTTP সার্ভারটি পুনরায় ব্যবহার করতে চান, উদাহরণস্বরূপ socket.ioএকই HTTP সার্ভারের মধ্যে চলতে হবে :

var express = require('express');
var app     = express();
var server  = require('http').createServer(app);
var io      = require('socket.io').listen(server);
...
server.listen(1234);

তবে, app.listen()HTTP সার্ভার উদাহরণটিও ফেরত দেয়, তাই কিছুটা পুনর্লিখনের মাধ্যমে আপনি নিজে এইচটিটিপি সার্ভার তৈরি না করেই অনুরূপ কিছু অর্জন করতে পারেন:

var express   = require('express');
var app       = express();

// app.use/routes/etc...

var server    = app.listen(3033);
var io        = require('socket.io').listen(server);

io.sockets.on('connection', function (socket) {
  ...
});

2
তাই ( 'HTTP ") createServer (প্রয়োজন (।" প্রয়োজন প্রকাশ "(প্রকাশ") () শুনতে (80))) শুনতে (80) হয় প্রয়োজন ===। "।?
user2167582

7
@ ব্যবহারকারী 2167582 এর প্রভাবটি একই, হ্যাঁ, তবে অবশ্যই একটি আক্ষরিক ===তুলনা ব্যর্থ হবে;) আপনি যদি আমাকে বিশ্বাস না করেন তবে সর্বদা উত্স থাকে
রবার্টক্লেপ

1
হয় var socketio = require('socket.io')আপনার লেখা তৃতীয় লাইন প্রয়োজনীয় উপর?
ডেভিডএক্স 1

1
প্রো এবং কনসের প্রতিটি?
ট্যানার গ্রীষ্ম

2
@ ট্যানারসুমার্স আমি ব্যবহারিকভাবে সর্বদা ব্যবহার করি app.listen()কারণ এর জন্য কম কোড প্রয়োজন। যেহেতু এটি শীর্ষে কেবল একটি খুব পাতলা স্তর server.listen()এবং এটি সার্ভারের উদাহরণ দেয়, ম্যানুয়ালি আলাদা আলাদা HTTP সার্ভার উদাহরণ তৈরি করার কোনও কারণ নেই।
রবার্টক্লেপ

64

আপনি যখন https সার্ভারের জন্য সেটআপ করতে চান তখন অ্যাপ্লিকেশনটি ব্যবহার করার এবং HTTP সার্ভার শোনার আরও একটি পার্থক্য রয়েছে

Https সেট আপ করতে আপনার নীচের কোডটি দরকার:

var https = require('https');
var server = https.createServer(app).listen(config.port, function() {
    console.log('Https App started');
});

এক্সপ্রেস থেকে অ্যাপটি কেবল HTTP সার্ভারটি ফিরিয়ে দেবে, আপনি এটিকে এক্সপ্রেসে সেট করতে পারবেন না, তাই আপনাকে https সার্ভার কমান্ডটি ব্যবহার করতে হবে to

var express = require('express');
var app = express();
app.listen(1234);

30

কেবল সময়নিষ্ঠতার উদ্দেশ্যে এবং কিছুটা টিম উত্তর প্রসারিত করুন। অফিসিয়াল ডকুমেন্টেশন
থেকে :

এক্সপ্রেস () দ্বারা প্রত্যাবর্তিত অ্যাপ্লিকেশনটি আসলে একটি জাভাস্ক্রিপ্ট ফাংশন, অনুরোধগুলি পরিচালনা করতে কলব্যাক হিসাবে নোডের এইচটিটিপি সার্ভারগুলিতে পাস করার জন্য নকশাকৃত

এটি আপনার অ্যাপের এইচটিটিপি এবং এইচটিটিপিএস উভয় সংস্করণকে একই কোড বেসের সাথে সরবরাহ করা সহজ করে তোলে কারণ অ্যাপ্লিকেশনগুলি এর উত্তরাধিকার সূত্রে আসে না (এটি কেবল একটি কলব্যাক):

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

App.listen () পদ্ধতি আয় একটি http.Server বস্তু এবং (জন্য HTTP- র) একটি হল সুবিধার পদ্ধতি নিম্নলিখিত জন্য:

app.listen = function() {
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

1
দয়া করে কোডের দ্বিতীয় টুকরোটিতে আরও কিছুটা ব্যাখ্যা করুন Wএখানে কোনও সুবিধাদির পদ্ধতিতে আপনি কী বোঝাতে চাইছেন?
আকাশ ভার্মা

@ আকাশবর্মা এটি এক্স্রেসের সোর্স কোডের এক টুকরো যা পাওয়া যাবে express/lib/appplication.jsএবং নোডের এইচটিপি সার্ভার তৈরির শর্টকাট ছাড়া আর কিছুই নয়।
ইভান তালালাইভ

সুতরাং আপনি বলতে চাইছেন যে আমরা যখন কলব্যাক হিসাবে এক্সপ্রেস () দ্বারা অ্যাপটি ব্যবহার করি তখন এটি বাইরের এইচটিটিপি সার্ভারের (80 বা 443 এর মধ্যে দিয়ে) অনুরোধটি গ্রহণ করে এবং তারপরেই অন্য একটি ভার্চুয়াল সার্ভার তৈরি করে। সার্ভারটি নিজের মধ্যে তৈরি করে এবং শুনতে এটি ব্যবহার করে অনুরোধ এটি পাঠানো?
আকাশ ভার্মা

10

আমি একই প্রশ্নটি নিয়ে এসেছি তবে গুগলের পরে, আমি দেখতে পেলাম যে কোনও বড় পার্থক্য নেই :)

গিথুব থেকে

আপনি যদি এইচটিটিপি এবং এইচটিটিপিএস সার্ভার উভয়ই তৈরি করতে চান তবে আপনি এখানে বর্ণিত "HTTP" এবং "https" মডিউলগুলির সাহায্যে এটি করতে পারেন।

/**
 * Listen for connections.
 *
 * A node `http.Server` is returned, with this
 * application (which is a `Function`) as its
 * callback. If you wish to create both an HTTP
 * and HTTPS server you may do so with the "http"
 * and "https" modules as shown here:
 *
 *    var http = require('http')
 *      , https = require('https')
 *      , express = require('express')
 *      , app = express();
 *
 *    http.createServer(app).listen(80);
 *    https.createServer({ ... }, app).listen(443);
 *
 * @return {http.Server}
 * @api public
 */

app.listen = function(){
  var server = http.createServer(this);
  return server.listen.apply(server, arguments);
};

এছাড়াও আপনি যদি সকেট.ইও দিয়ে কাজ করতে চান তবে তাদের উদাহরণ দেখুন

এই দেখুন

আমি পছন্দ করি app.listen():)


9

এক্সপ্রেসটি মূলত এইচপি মডিউলের একটি মোড়ক যা বিকাশকারীদের স্বাচ্ছন্দ্যের জন্য এমনভাবে তৈরি করা হয় যে ..

  1. তারা এক্সপ্রেস ব্যবহার করে এইচটিটিপি অনুরোধগুলির (সহজেই) প্রতিক্রিয়া জানাতে মিডলওয়্যার সেট আপ করতে পারে।
  2. তারা এক্সপ্রেস ব্যবহার করে টেমপ্লেটগুলিতে তর্কগুলি পাস করার উপর ভিত্তি করে গতিশীলভাবে HTML পৃষ্ঠাগুলি রেন্ডার করতে পারে।
  3. তারা এক্সপ্রেস ব্যবহার করে সহজেই রাউটিংকে সংজ্ঞায়িত করতে পারে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.