Node.js / Express.js ऐप केवल पोर्ट 3000 पर काम करता है


96

मेरे पास एक Node.js / Express.js ऐप है जो मेरे सर्वर पर चल रहा है जो केवल पोर्ट 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) A portकी आवश्यकता है .listen(), इसलिए आपको बिना जाने की कोशिश नहीं करनी चाहिए। 2) क्या आपको एप्लिकेशन चलाते समय कोई त्रुटि हो रही है? या यह सिर्फ एक ब्राउज़र से दुर्गम लगता है? 3) यदि आप के साथ एक ही मशीन पर वेबसाइट का उपयोग करने का प्रयास कर रहे localhost:3000, localhost:3001आदि? यदि आप दो मशीनों, एक ग्राहक और एक सर्वर का उपयोग कर रहे हैं, तो आपको क्लाइंट से अनुरोध प्राप्त करने के लिए नोड को अनुमति देने के लिए सर्वर पर फ़ायरवॉल पर अपवाद जोड़ने की आवश्यकता होगी।
जोनाथन लोनोव्स्की

आप ऐप को कैसे लॉन्च कर रहे हैं?
11

कोई भी मौका आप एक साफ़ / साफ संस्करण को एक जिस्ट में डाल सकते हैं?
विच एग

@ जोनाथन के बारे में जानने के लिए अच्छा है .listen()। ऊपर जब मैं कहता हूं, "ऐप चलता है", यह वही है जो आप कह रहे हैं, "एप्लिकेशन चलाते समय कोई त्रुटि नहीं"। जब मैं कहता हूं, "वेब पेज लोड नहीं होता है", यह वही है जो आप कह रहे हैं, "एक ब्राउज़र से दुर्गम"। सभी एक ही मशीन (मेरा सर्वर) से एक्सेस करते हैं। प्रतिक्रिया के लिए धन्यवाद।
बेंजामिन मार्टिन

1
@ डिच मैं उपयोग कर रहा हूं $ supervisor app.jsया $ PORT=[PORT] node app.jsजब मैं पर्यावरण पोर्ट चर सेट करना चाहता हूं। मैं एक कोड नमूना डालूँगा।
बेंजामिन मार्टिन

जवाबों:


117

यदि आपके ऐप में ऐसा कुछ है तो निम्नलिखित काम करता है।

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ही बहुत सारे प्लेटफ़ॉर्म की सहायता के लिए उपयोग किया जाता है क्योंकि एक सेवा पर्यावरण का उपयोग पोर्ट को सेट करने के लिए उनके चश्मे के साथ-साथ आंतरिक एक्सप्रेस कॉन्फ़िगरेशन के अनुसार करती है। निम्नलिखित एक पर्यावरण कुंजी = मूल्य जोड़ी सेट करता है और फिर आपका ऐप लॉन्च करता है।

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

2
यह वाकई अजीब है। मैंने निम्नलिखित कार्य किए हैं: 1. app.set()मेरे ऐप के अंदर कोड डालें और 3000 से 8080 बदल दें। फिर भी केवल काम करता है app.listen(3000)। 2. नोड ऐप को चलाते समय पर्यावरण पोर्ट चर को 8080 में बदलें। अभी भी केवल काम करता है app.listen(3000)। 3. गया / हमें / बिन / एक्सप्रेस (लाइन 220) और 3000 से 8080 बदल गया। अभी भी केवल पर काम करता है app.listen(3000)। यद्यपि जानकारीपूर्ण पोस्ट के लिए धन्यवाद। क्या मुझे पुनः आरंभ करने की आवश्यकता है? मैं जो भी बता सकता हूं उससे एक्सप्रेस को फिर से शुरू नहीं किया जा सकता है और हर बार मेरे द्वारा उपयोग किए जाने पर नोड ऐप को फिर से शुरू करनाnode app.js.
बेंजामिन मार्टिन

@BenjaminMartin एक्सप्रेस किसी भी अन्य मॉड्यूल की तरह एक मॉड्यूल है, इसलिए बस एक सरल node app.jsइसे शुरू करेगा (मैं व्यक्तिगत रूप से उपयोग करते nodemonसमय विकसित और परीक्षण कर रहा हूं । आप जो सोच रहे होंगे वह expressकमांड-लाइन निष्पादन योग्य है जो एक सहायक प्रक्रिया है जो आपके कंकाल का निर्माण करती है। फ़ाइल संरचना। क्या आप अपने कोड का एक हिस्सा पोस्ट कर सकते हैं?
EhevuTov

पकड़ लिया। मैं आमतौर पर केवल अपने ऐप को अनिश्चित काल तक चालू रखने के लिए nodemonसंयोजन के रूप में उपयोग करता nohupहूं। मैं सीएल के निष्पादन योग्य संस्करण का उपयोग नहीं कर रहा हूं, expressइसलिए जब भी मैं अपने nodeऐप को पुनरारंभ करता हूं , तो इसे हर बार पुनरारंभ करना होगा । कोड के साथ एक संपादन के लिए मेरी मूल पोस्ट देखें। धन्यवाद!
बेंजामिन मार्टिन

@BenjaminMartin मेरे उत्तर के निचले भाग की जाँच करें और उस कोड को चलाएं। यह ठीक काम करना चाहिए। मैंने सिर्फ अपनी मशीन पर इसका परीक्षण किया।
इह्वुतोव

यह पोर्ट को बदलने के लिए एक और उपयोगी तरीका है, लेकिन यह तब भी काम करता है जब पोर्ट 3000 होता है। मुझे आश्चर्य है कि अगर मेरे सर्वर पर ऐसा कुछ है जो केवल सामग्री को कुछ बंदरगाहों पर सेवा करने की अनुमति देता है। मुझे पता नहीं है कि यह कॉन्फ़िगरेशन कहाँ स्थित होगा। यह एक मुद्दा हो सकता है? FYI करें मैं Ubuntu 10.04 चला रहा हूं।
बेंजामिन मार्टिन

31

में bin/www, एक पंक्ति है:

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

इसे संशोधित करने का प्रयास करें।


1
मैंने app.js में पोर्ट सेट करने की कोशिश की लेकिन यह लाइन ओवरराइड कर रही थी। पोर्ट बदलने के लिए यह सही जगह है।
नील

12

इसे इस्तेमाल करे

$ PORT=8080 node app.js

1
उत्तर के लिए धन्यवाद - यह केवल तभी काम करता है जब मेरे पास app.listen (3000) app.js. के अंदर सेट हो। दूसरे शब्दों में, जब मैंने ऐप चलाया है तो पोर्ट को सेट करने से आप app.listen () को ओवरराइड नहीं करते हैं।
बेंजामिन मार्टिन

उत्तम। मैं एक्सप्रेस के साथ उपयोग करता हूं: PORT = 8000 npm की शुरुआत। इसलिए आप जो चाहें उपयोग कर सकते हैं: डी।
जोहान होक्समा

10

इस लिंक का संदर्भ लें।

बिन> www स्थान का पता लगाने की कोशिश करें और पोर्ट नंबर बदलने की कोशिश करें ...


9

एक्सप्रेस फ्रेमवर्क पर श्रवण पोर्ट को बदलने का डिफ़ॉल्ट तरीका बिन फ़ोल्डर में www नामक फ़ाइल को संशोधित करना है।

वहां, आपको निम्नलिखित के रूप में एक पंक्ति मिलेगी

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

मान को किसी भी पोर्ट पर 3000 बदलें।

यह एक्सप्रेस संस्करण 4.13.1 के लिए मान्य है


4

मैक ओएस एक्स और लिनक्स उपयोगकर्ताओं के लिए बस एक नोट:

यदि आप 1024 से कम पोर्ट नंबर पर अपना नोड / एक्सप्रेस ऐप चलाना चाहते हैं, तो आपको सुपरयुसर के रूप में दौड़ना होगा: sudo PORT=80 node app.js


2
1024 से नीचे के पोर्ट पर अपने ऐप को चलाने का एक बेहतर विकल्प पोर्ट को अधिक संख्या के साथ अग्रेषित करना है। 1024 से कम पोर्ट संख्या तक पहुंचने में सक्षम होने के लिए सुडो का उपयोग करना आमतौर पर बुरा अभ्यास माना जाता है।
पीटर VDE

4

एक्सप्रेस-जनरेटर (4.13.1) app.js के साथ कोड का सबसे अंतिम संस्करण में एक निर्यात मॉड्यूल है और सर्वर / बिन / www में app.set ('पोर्ट', process.env.PORT) 3001 का उपयोग करके शुरू किया गया है। in.js बिन / www में एक समान बयान द्वारा ओवरराइड किया जाएगा। मैंने बस बिन / www में बयान बदल दिया।


2

यह कभी भी हल नहीं किया गया था ... आपने अपनी मशीन के सामने उन बंदरगाहों को अवरुद्ध करने की संभावना है, या उन बंदरगाहों के उपयोग को रोकने के लिए iptables की स्थापना की है।

जब आप अपना ऐप चलाते हैं, तो nmap -F localhost चलाने का प्रयास करें (यदि आपके पास यह नहीं है तो nmap स्थापित करें)। यदि ऐसा प्रतीत होता है कि आप ऐप को सही पोर्ट पर चला रहे हैं और आप इसे रिमोट ब्राउज़र के माध्यम से एक्सेस नहीं कर सकते हैं, तो कुछ मिडलवेयर या फिजिकल फ़ायरवॉल है जो पोर्ट को ब्लॉक कर रहा है।

उम्मीद है की यह मदद करेगा!


मेरे लिए यही काम आया। पोर्ट की अनुमति देना भूल गया।
१०:३४

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को पूरी तरह से नजरअंदाज किया जा सकता है लेकिन इसकी सिफारिश नहीं की जाती है



0

मैं minimistपोर्ट को नियंत्रित करने के लिए पैकेज और नोड स्टार्टअप तर्क का उपयोग कर रहा हूं ।

node server.js --port 4000

या

node server.js -p 4000

Server.js के अंदर, पोर्ट द्वारा निर्धारित किया जा सकता है

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

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

//....listen(port);

और यह 3000 तक डिफॉल्ट करता है अगर कोई पोर्ट एक तर्क के रूप में पारित नहीं होता है।

फिर आप portचर पर सुनने का उपयोग कर सकते हैं ।



0

मुझे लगता है कि सबसे अच्छा तरीका है कि dotenv पैकेज का उपयोग करें और फ़ोल्डर के अंदर .envफ़ाइल को संशोधित किए बिना पोर्ट को पोर्ट पर सेट करेंwwwbin

बस कमांड के साथ पैकेज स्थापित करें:

npm install dotenv

आपके आवेदन पर इसकी आवश्यकता है:

require('dotenv').config()

अपने प्रोजेक्ट के रूट डायरेक्टरी में .env फ़ाइल बनाएँ, और पोर्ट 5000 (उदाहरण के लिए) पोर्ट 5000 सुनने के लिए उसमें जोड़ें

PORT=5000

और बस।

अधिक जानकारी यहाँ


0

यदि आप Nodemon का उपयोग कर रहे हैं तो मेरा अनुमान है कि PORT 3000 को nodemonConfig में सेट किया गया है। अगर ऐसा है तो जाँच करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.