নোড.জেএস / এক্সপ্রেস.জেএস অ্যাপ কেবল পোর্ট 3000 এ কাজ করে


97

আমার সার্ভারে একটি নোড.জেএস / এক্সপ্রেস.জেএস অ্যাপ চলছে যা কেবলমাত্র 3000 পোর্টে কাজ করে এবং আমি কেন তা জানার চেষ্টা করছি। আমি যা পেয়েছি তা এখানে:

  • কোনও পোর্ট ( app.listen()) নির্দিষ্ট না করেই অ্যাপটি চলে তবে ওয়েব পৃষ্ঠা লোড হয় না।
  • 3001 ( app.listen(3001)) বা অন্য যে কোনও বন্দর ব্যবহৃত হয় না, তে অ্যাপটি চালিত হয় তবে ওয়েব পৃষ্ঠা লোড হয় না।
  • 2999 পোর্টে, অ্যাপ্লিকেশনটি একটি ত্রুটি ছুড়েছে কারণ অন্য কোনও কিছু সেই পোর্টটি ব্যবহার করছে।
  • 3000 পোর্টে অ্যাপ্লিকেশনটি চালিত হয় এবং ওয়েব পৃষ্ঠা জরিমানা হয়।

আমি জানি যে এক্সপ্রেস বন্দর 3000. কিন্তু আশ্চর্যের ডিফল্ট অ্যাপ্লিকেশান, আমার অ্যাপ্লিকেশানের শুধুমাত্র রান যখন আমি স্পষ্টভাবে এটি বন্দর 3000 উপর রান করতে ( app.listen(3000))।

আমি এটি 220 লাইনে পেয়েছি /usr/bin/express:

app.set(\'port\', process.env.PORT || 3000);

যা পূর্বে উল্লিখিত হিসাবে করছে: পোর্টটি নির্দিষ্ট করে দেওয়া হয়েছে বা কিছু নির্দিষ্ট না করা থাকলে 3000 এ সেট করা হচ্ছে।

আমি কীভাবে আমার অ্যাপ্লিকেশনটিকে 8080 বা 3001 এর মতো কোনও আলাদা বন্দরে কাজ করতে পারি?

ধন্যবাদ!

সম্পাদনা করুন: কোড নমুনা (খুব সাধারণ নোড / এক্সপ্রেস অ্যাপ)

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

app.get('/', function(req, res){
    res.send('hello world'); 
});

// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);

1) এ portদ্বারা প্রয়োজনীয় .listen(), সুতরাং আপনার ছাড়া চেষ্টা করা উচিত নয়। 2) অ্যাপ্লিকেশনটি চালানোর সময় আপনি কোনও ত্রুটি পেয়েছেন? বা এটি কি ব্রাউজার থেকে কেবল অ্যাক্সেস অযোগ্য বলে মনে হচ্ছে? 3) আপনার সাথে একই মেশিনে ওয়েবসাইট অ্যাক্সেস করার চেষ্টা করছেন localhost:3000, localhost:3001ইত্যাদি? আপনি যদি দুটি মেশিন, একটি ক্লায়েন্ট এবং একটি সার্ভার ব্যবহার করছেন তবে নোডকে ক্লায়েন্টের কাছ থেকে অনুরোধগুলি গ্রহণের অনুমতি দেওয়ার জন্য আপনাকে সার্ভারের ফায়ারওয়ালটিতে ব্যতিক্রম যুক্ত করতে হবে।
জোনাথন লোনভস্কি

আপনি অ্যাপটি কীভাবে চালু করছেন?
ডিচ করুন

কোনও সুযোগ আপনি কোনও টুকরো টুকরো টুকরো / স্যানিটাইজড সংস্করণ রাখতে পারেন?
ডিচ করুন

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

4
@ ডিচ আমি ব্যবহার করছি $ supervisor app.jsবা $ PORT=[PORT] node app.jsযখন আমি পরিবেশ বন্দর ভেরিয়েবল সেট করতে চাই। আমি একটি কোড নমুনা রাখব।
বেনিয়ামিন মার্টিন

উত্তর:


119

আপনার অ্যাপ্লিকেশন.জেএসএস এ যদি এরকম কিছু থাকে তবে নিম্নলিখিতগুলি কাজ করে:

http.createServer(app).listen(app.get('port'),
  function(){
    console.log("Express server listening on port " + app.get('port'));
});

আপনি যে পোর্টটি চান তা ব্যবহার করার জন্য আপনার কোডটি স্পষ্টভাবে হার্ডকোড করুন, যেমন:

app.set('port', process.env.PORT || 3000);

এই কোডটির অর্থ আপনার বন্দরটিকে পরিবেশের পরিবর্তনশীলতে সেট করুন PORTবা যদি এটি undefinedপরে আক্ষরিকতে সেট করা থাকে 3000

অথবা, বন্দরটি সেট করতে আপনার পরিবেশ ব্যবহার করুন। পরিবেশ মাধ্যমে এটি সেট মধ্যে সাহায্য অঙ্কিত করতে ব্যবহৃত হয় PRODUCTIONএবং DEVELOPMENTতাদের চশমা সেইসাথে অভ্যন্তরীণ এক্সপ্রেস configs অনুযায়ী বন্দর সেট করতে এবং একটি পরিষেবা হিসাবে প্ল্যাটফর্ম অনেকটা পরিবেশ ব্যবহার করুন। নিম্নলিখিতটি এনভায়রনমেন্ট কী = মান জোড় সেট করে এবং তারপরে আপনার অ্যাপ্লিকেশনটি চালু করে।

$ PORT=8080 node app.js

আপনার কোড উদাহরণের প্রসঙ্গে, আপনি এর মতো কিছু চান:

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

// sets port 8080 to default or unless otherwise specified in the environment
app.set('port', process.env.PORT || 8080);

app.get('/', function(req, res){
    res.send('hello world');
});

// Only works on 3000 regardless of what I set environment port to or how I set
// [value] in app.set('port', [value]).
// app.listen(3000);
app.listen(app.get('port'));

4
এটা সত্যিই অদ্ভুত। আমি নিম্নলিখিতটি সম্পন্ন করেছি: ১. app.set()আমার অ্যাপ্লিকেশনটির ভিতরে কোডটি রেখে 3০০০ থেকে ৮০৮০ পরিবর্তন করা হয়েছে Still তবে কেবলমাত্র কাজ চলছে app.listen(3000)। 2. নোড অ্যাপ্লিকেশন চালানোর সময় পরিবেশ বন্দর ভেরিয়েবলটিকে 8080 এ পরিবর্তন করুন। এখনও শুধুমাত্র কাজ করে app.listen(3000)। 3. / ইউএসআর / বিন / এক্সপ্রেস (লাইন 220) গিয়েছেন এবং 3000 থেকে 8080 এ পরিবর্তিত হয়েছে Still এখনও কেবল কাজ করে app.listen(3000)। তথাপি পোস্টের জন্য আপনাকে ধন্যবাদ। আমার আবার চালু করার দরকার আছে কি? আমি যা বলতে পারি তা থেকে এক্সপ্রেসটি আরম্ভ করা যায় না এবং নোড অ্যাপ্লিকেশনটি পুনরায় চালু করা আমি যখনই ব্যবহার করি প্রতিবার ঘটেnode app.js.
বেনজমিন মার্টিন

@ বেঞ্জামিনমার্টিন এক্সপ্রেস হ'ল অন্য মডিউলের মতোই একটি মডিউল, সুতরাং কেবল একটি সাধারণ node app.jsএটি শুরু করবে ( nodemonবিকাশ এবং পরীক্ষার সময় আমি ব্যক্তিগতভাবে ব্যবহার করি you আপনি expressকমান্ড-লাইন এক্সিকিউটেবল যা ভাবছেন তা হেল্পার প্রক্রিয়া যা আপনার কঙ্কাল তৈরি করে is ফাইলের কাঠামো
you আপনি

গ্যাচা। আমি সাধারণত আমার অ্যাপটিকে অনির্দিষ্টকালের জন্য চলতে রাখতে nodemonএকত্রে ব্যবহার nohupকরি। আমি সিএল এক্সিকিউটেবল সংস্করণ ব্যবহার করছি না expressতাই প্রতিবার আমার nodeঅ্যাপ্লিকেশনটি পুনরায় চালু করার সময় এটি পুনরায় চালু হতে হবে । কোড সহ একটি সম্পাদনার জন্য আমার আসল পোস্টটি দেখুন। ধন্যবাদ!
বেনজামিন মার্টিন

@ বেঞ্জামিনমার্টিন আমার উত্তরের নীচে চেক করুন এবং সেই কোডটি চালান। এটা ঠিক কাজ করা উচিত। আমি কেবল এটি আমার মেশিনে পরীক্ষা করেছি।
এহভুটোভ

এটি বন্দরটি পরিবর্তন করার অন্য একটি কার্যকর উপায় তবে এটি তখনও কাজ করে যখন বন্দরটি 3000 হয় I'm যদিও এই কনফিগারেশনটি কোথায় থাকবে তা আমার কোনও ধারণা নেই। এই একটি সমস্যা হতে পারে? এফওয়াইআই আমি উবুন্টু 10.04 চালাচ্ছি।
বেনজামিন মার্টিন

32

ইন bin/www, একটি লাইন আছে:

var port = normalizePort(process.env.PORT || '3000');

এটি পরিবর্তন করার চেষ্টা করুন।


4
আমি অ্যাপ্লিকেশনগুলিতে বন্দরটি স্থাপন করার চেষ্টা করেছি কিন্তু এই লাইনটি ওভাররাইড করছে। বন্দরটি পরিবর্তন করার জন্য এটি সঠিক জায়গা।
নীল

12

এটা চেষ্টা কর

$ PORT=8080 node app.js

4
উত্তরের জন্য ধন্যবাদ - এটি কেবলমাত্র তখনই কাজ করে যদি আমার app.js. এর ভিতরে app.listen (3000) সেট থাকে। অন্য কথায়, আমি যেমন অ্যাপ্লিকেশনটি চালিত করি তখন পোর্টটি সেট করা আপনার দ্বারা অ্যাপ্লিকেশনকে ওভাররাইড করে বলে মনে হয় না ()।
বেনজমিন মার্টিন

পারফেক্ট আমি এক্সপ্রেসের সাথে ব্যবহার করি: PORT = 8000 এনপিএম শুরু। সুতরাং আপনি যা খুশি তা ব্যবহার করতে পারেন: ডি।
জোহান হয়েকসমা

11

এই লিঙ্কটি দেখুন।

বিন> www অবস্থানটি সনাক্ত করার চেষ্টা করুন এবং পোর্ট নম্বর পরিবর্তন করার চেষ্টা করুন ...


9

এক্সপ্রেস ফ্রেমওয়ার্কে শ্রবণ পোর্টটি পরিবর্তন করার ডিফল্ট উপায় হ'ল বিন ফোল্ডারে www নামের ফাইলটি পরিবর্তন করা।

সেখানে, আপনি নীচের মতো একটি লাইন পাবেন

var port = normalizePort(process.env.PORT || '3000');

আপনার ইচ্ছামত যে কোনও বন্দরে 3000 এর মানটি পরিবর্তন করুন।

এটি এক্সপ্রেস সংস্করণ 4.13.1 এর জন্য বৈধ


4

ম্যাক ওএস এক্স এবং লিনাক্স ব্যবহারকারীদের জন্য কেবল একটি নোট:

আপনি যদি 1024 এর চেয়ে কম পোর্ট নম্বরে আপনার নোড / এক্সপ্রেস অ্যাপ্লিকেশন চালাতে চান তবে আপনাকে সুপারভাইজার হিসাবে চালাতে হবে: sudo PORT=80 node app.js


4
1024 নীচের একটি বন্দরে আপনার অ্যাপ্লিকেশন চালানোর জন্য আরও ভাল বিকল্প হ'ল বৃহত্তর সংখ্যা সহ একটি পোর্ট ফরওয়ার্ড করা। 1024 এর চেয়ে কম পোর্ট নম্বর অ্যাক্সেস করতে সক্ষম হতে sudo ব্যবহার করা সাধারণত খারাপ অভ্যাস হিসাবে বিবেচিত হয়।
পিটার ভিডিই 15

4

এক্সপ্রেস-জেনারেটরের (4.13.1) অ্যাপ্লিকেশন সহ কোডের সর্বশেষতম সংস্করণে app.js একটি রফতানি মডিউল এবং সার্ভারটি app.set ('পোর্ট', প্রক্রিয়া.এনভি.এপটি || 3001) ব্যবহার করে / বিন / www তে শুরু হয়েছিল) in app.js বিন / www তে অনুরূপ বিবৃতি দ্বারা ওভাররাইড করা হবে। আমি সবেমাত্র বিন / www তে বিবৃতি পরিবর্তন করেছি।


2

লক্ষ্য করা যায় এটি কখনই সমাধান করা হয়নি ... সম্ভবত আপনার মেশিনের সামনে ফায়ারওয়াল রয়েছে those বন্দরগুলি ব্লক করা, বা ptables সেট আপ করা হয়েছে those বন্দরগুলির ব্যবহার রোধ করতে।

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

আশাকরি এটা সাহায্য করবে!


এটাই আমার পক্ষে কাজ করেছে। বন্দরের অনুমতি দিতে ভুলে গেছেন।
lalilulelost

2

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

export PORT=8080
node <your-app.js>

2

আপনি যদি কিছু দেখাতে চান তবে আপনি 3000 এ সংযুক্ত আছেন

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

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

আমি আশা করি এটি আপনার পক্ষে সহায়ক হবে


1

এক্সপ্রেসের বর্তমান সংস্করণ অনুসারে উত্তর দিন

আপনি যদি এক্সপ্রেসের বর্তমান সংস্করণটির বিষয়ে কথা বলেন , আপনি যদি app.listen()পোর্ট নির্দিষ্ট না করেই শুনতে শুরু করেন তবে এক্সপ্রেস আপনার অ্যাপ্লিকেশনের জন্য একটি এলোমেলো বন্দর বেছে নেবে , বর্তমানে এটি কোন পোর্টটি ব্যবহার করছে তা সম্পর্কে জানতে

app.listen(0, () => {
    console.log(app.address().port)
}

উচিত আউটপুট পোর্ট আপনার এর app। তদুপরি যে প্রথম পরামিতি 0সম্পূর্ণ উপেক্ষা করা যেতে পারে তবে এটির প্রস্তাব দেওয়া হয় না


1

আমি minimistপোর্টটি নিয়ন্ত্রণ করতে প্যাকেজ এবং নোড স্টার্টআপ আর্গুমেন্ট ব্যবহার করছি ।

node server.js --port 4000

বা

node server.js -p 4000

সার্ভার.জেএস এর অভ্যন্তরে, বন্দরটি দ্বারা নির্ধারিত হতে পারে

var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)

//....listen(port);

আর কোনও পোর্ট আর্গুমেন্ট হিসাবে পাস না করা হলে এটি 3000 এ ডিফল্ট হয়।

তারপরে আপনি portভেরিয়েবলের উপর শুনুন ব্যবহার করতে পারেন ।


একক হাইফেন -pআমার পক্ষে কাজ করেনি। তবে ডাবল হাইফেন --pকাজ করছে। এই উত্তরের জন্য ধন্যবাদ।
মুথু কুমারন

0

আপনি যে অ্যাপ্লিকেশনটির সেই ফোল্ডারটি চালাচ্ছেন তা নিশ্চিত করুন, যেখানে আপনার প্যাকেজ.জসন রয়েছে।


0

App.js এ, কেবল যুক্ত করুন ...

process.env.PORT=2999;

এটি এক্সপ্রেস অ্যাপ্লিকেশনটির পোর্ট ভেরিয়েবলকে আলাদা করবে।


0

আমি মনে করি সর্বোত্তম উপায় হ'ল ডটেনভ প্যাকেজ ব্যবহার করা এবং ফোল্ডারের অভ্যন্তরে .envফাইলটি পরিবর্তন না করে কনফিগারেশে পোর্টটি সেট করা ।wwwbin

কমান্ডটি দিয়ে প্যাকেজটি ইনস্টল করুন:

npm install dotenv

আপনার আবেদনে এটি প্রয়োজন:

require('dotenv').config()

আপনার প্রকল্পের মূল ডিরেক্টরিতে একটি .env ফাইল তৈরি করুন এবং এতে পোর্ট যুক্ত করুন (উদাহরণস্বরূপ) 5000 পোর্টে শুনতে

PORT=5000

এবং এটাই.

আরও তথ্য এখানে


0

আপনি যদি নোডমন ব্যবহার করছেন তবে আমার অনুমান হয় পোর্ট 3000 নোডমন কনফিগে সেট করা আছে। ঘটনাটি কিনা তা পরীক্ষা করে দেখুন।

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