एक्सप्रेस 4.x में "./bin/www" क्या करता है?


157

मैंने बस अपने Node.js ऐप में Express 4.0 के बारे में सीखना शुरू कर दिया, और मैंने पाया कि यह ./bin/wwwफ़ाइल जनरेट करता है, जिस पर केवल एप्लिकेशन सर्वर और पोर्ट सेटिंग्स लिखी जाती हैं और अन्य सभी जैसे मिडलवेयर और रूटिंग को ./app.jsफ़ाइल में परिभाषित किया जाता है।

हालांकि, मुझे यकीन नहीं है कि यह क्या ./bin/wwwकरता है। मैंने एक्सप्रेस 3.x का उपयोग किया है और मैंने हमेशा सर्वर और पोर्ट सेटिंग्स के साथ-साथ राउटिंग और मिडिलवेयर को समान ./app.jsफ़ाइल में परिभाषित किया है, और इसके साथ अपने वॉल्यूम को लॉन्च किया है node app.js। तो क्या उपयोग करने की बात है ./bin/www? क्या यह केवल सर्वर और पोर्ट परिभाषा को दूसरों से अलग करता है?

अभी, जब मैं एक्सप्रेस-जनरेटर का उपयोग करके पैकेज बनाता हूं, तो package.jsonनिम्नलिखित परिभाषा शामिल है:

"scripts": {
    "start": "node ./bin/www"
}

हालांकि, मुझे आश्चर्य है कि क्या मुझे अपने ऐप का उपयोग करके लॉन्च करना चाहिए node ./bin/www, या npm start। मुझे अपना ऐप शुरू करने के लिए किस कमांड पर चलना चाहिए?

और यह भी, जब मैंने अपने ऐप को हरोकू में तैनात किया, तो मुझे Procfileफ़ाइल में क्या लिखना चाहिए ? है web: node app.jsपर्याप्त?


1
सबसे अच्छा देखें स्पष्टीकरण पर stackoverflow.com/a/36638353/984471
मनोहर रेड्डी Poreddy

जवाबों:


131

में एक्सप्रेस 3.0 , आप सामान्य रूप से प्रयोग करेंगे app.configure()(या app.use()) की आवश्यकता मिडलवेयर आप की जरूरत स्थापित करने के लिए। आपके द्वारा निर्दिष्ट उन मिडलवेयर को एक्सप्रेस 3.0 के साथ एक साथ बंडल किया गया है।

उदाहरण:

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.compress());
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());

में एक्सप्रेस 4.0 हालांकि, सभी मिडलवेयर इसलिए हटा दिया गया है कि वे बनाए रखा और कोर एक्सप्रेस (स्थिर मिडलवेयर को छोड़कर) से स्वतंत्र रूप से अद्यतन किया जा सकता है, इस प्रकार वे अलग से (क्या आप में देख कहा जा करने की जरूरत है app.js)।

bin/निर्देशिका एक स्थान है जहां आप अपने विभिन्न परिभाषित कर सकते हैं के रूप में कार्य करता है स्टार्टअप स्क्रिप्टwwwएक वेब सर्वर के रूप में एक्सप्रेस एप्लिकेशन शुरू करने के लिए एक उदाहरण है।

अंततः, आपके पास अलग-अलग स्क्रिप्ट हो सकती हैं test, जैसे , stopया restart, आदि इस संरचना के होने से आपको अलग-अलग स्टार्टअप कॉन्फ़िगरेशन करने की अनुमति मिलती है, बिना सब कुछ समेटे हुए app.js

अपने एक्सप्रेस ऐप को शुरू करने का सही तरीका है:

npm start

हरोकू के लिए एक एक्सप्रेस 4.x एप्लिकेशन को तैनात करने के लिए , इसे अपने में जोड़ें :Procfile

web: npm start

या यदि आप बस अपने में शुरुआत स्क्रिप्ट का उपयोग कर सकते हैं package.json, तो हरोकू स्वचालित रूप से उस का उपयोग करेगा, यहां और पढ़ें

"scripts": {
    "start": "node ./bin/www",
}

6
धन्यवाद। पिछले दो पैराग्राफों पर आपकी उत्कृष्ट व्याख्या के साथ, मुझे आखिरकार यह मिल गया है कि उपयोग करने का क्या मतलब है www। मुझे यकीन नहीं है कि इसका नाम इस तरह क्यों रखा गया है - शायद वर्ल्ड वाइड वेब के नाम पर?
ब्लैसजार्ड

1
ExpressJS के Github रेपो github.com/visionmedia/express पर @ NicolasS.Xu , त्वरित आरंभ अनुभाग तक नीचे स्क्रॉल करें
एंडी

4
@ क्यों "बिन", हालांकि? मुझे लगता है कि द्विआधारी निष्पादनयोग्य के साथ।
15

2
@ अनियमितमाइक मुझे लगता है, इसका अर्थ 'निष्पादन योग्य' स्क्रिप्ट्स भी हो सकता है (जैसे कि लिनक्स के वातावरण में)
एंडी

2
@ हाँ, ऐसा लगता है कि बहुत समय पहले इसका मतलब कुछ भी निष्पादन योग्य था। सामान्य रूप से पायथन, पर्ल, और यूनिक्स / लाइनक्स।
नियमित

10

एक्सप्रेस 3.x जैसे नोड एप्लिकेशन गैर-मानक स्टार्टअप फ़ाइलों का उपयोग करते हैं app.js, लेकिन यह चलाने के लिए गलत फ़ाइल है।

package.json है

   "scripts": {
     "start": "node ./bin/www"
   }

जो स्टार्टअप कमांड लाइन बताता है। यह गैर-तुच्छ है क्योंकि इसमें संभावित रूप से एक पूर्ण कमांड लाइन होती है, न कि स्टार्टर फ़ाइल के लिए एक रास्ता।


क्या आप मुझे इस प्रश्न का उत्तर देने में मदद कर सकते हैं? धन्यवाद!
निकोलस एसएक्सयू

7
इसे बिन क्यों कहा जाता है? इसमें बायनेरिज़ नहीं है। । ।
किन्नर होकेनहुल

2

यदि आप एक्सप्रेस-जनरेटर का उपयोग कर रहे हैं, बस अपने स्थानीय फाइल को देखो, ./bin, वहाँ है www./bin की फाइल के अंदर। इसलिए जब आप चलाते हैं node ./bin/www, तो नोड.जेएस wwwफ़ाइल में कोड निष्पादित करेगा । कुछ भी आकर्षक नहीं।


और यदि आप Azure ऐप सेवा में तैनात हैं, तो आपको web.config बनाना होगा और सभी डॉक्यूमेंट्स को प्रतिस्थापित करना होगा। बिन / www के साथ, उस दस्तावेज़ gist.github.com/rseroter/79ad73f5e6b20b029f765ca8b34f4fad के
हन्ना

1

विंडोज पर, इस कमांड का उपयोग करें:

DEBUG = myapp: * & npm start को सेट करें फिर एप्लिकेशन को एक्सेस करने के लिए अपने ब्राउज़र में http: // localhost: 3000 / लोड करें।


4
एसओ में आपका स्वागत है! मुझे नहीं लगता कि यह वास्तव में सवाल का जवाब देता है। कृपया उस मूल प्रश्न को पूरी तरह समझने के लिए प्रश्न को दोबारा पढ़ें।
जेक

0

उपरोक्त सभी ने अच्छी तरह से उत्तर दिया है। लेकिन अगर आप node app.jsकेवल एक्सप्रेस 3. * संस्करणों की तरह उपयोग करना चाहते हैं । आप नीचे का पालन कर सकते हैं:

क्योंकि एक्सप्रेस 4 जनरेटर द्वारा उत्पन्न की गई app.js फ़ाइल अब एक Node.js मॉड्यूल है , इसे अब स्वतंत्र रूप से ऐप के रूप में शुरू नहीं किया जा सकता है (जब तक कि आप कोड को संशोधित नहीं करते)। मॉड्यूल को Node.js फ़ाइल में लोड किया जाना चाहिए और Node.js फ़ाइल के माध्यम से शुरू किया जाना चाहिए। इस मामले में Node.js फ़ाइल है ./bin/www। अधिक जानकारी के लिए , आधिकारिक दस्तावेज़ देखें

एक्सप्रेस ऐप बनाने या ऐप शुरू करने के लिए न तो बिन डायरेक्टरी और न ही एक्सटेंशनलेस www फ़ाइल अनिवार्य है। वे केवल जनरेटर द्वारा किए गए सुझाव हैं, इसलिए अपनी आवश्यकताओं के अनुरूप उन्हें संशोधित करने के लिए स्वतंत्र महसूस करें।

Www निर्देशिका से छुटकारा पाने और चीजों को "एक्सप्रेस 3 रास्ता" रखने के लिए, उस लाइन को हटा दें जो मॉड्यूल कहती है। xports = app; app.js फ़ाइल के अंत में, उसके स्थान पर निम्न कोड चिपकाएँ:

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

app.listen(app.get('port'), () => {
  console.log(`Express server listening on port ${app.get('port')}`);
})

अगला, package.json फ़ाइल "start": "node ./bin/www"में बदलें । चूंकि, आपने अब ./bin/www की कार्यक्षमता को app.js. पर वापस ले लिया है अब, अपने एक्सप्रेस ऐप को चलाने के लिए उपयोग करना शुरू करें।"start": "node app.js"


-1

इसे Procfile में डालें web: node ./bin/www और जांचें कि क्या यह साथ काम करता है foreman start। ऐप को पोर्ट 5000 पर उपलब्ध होना चाहिए

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