Express .x'te “./bin/www” ne yapar?


157

Az önce Node.js uygulamamda Express 4.0 hakkında bilgi edinmeye başladım ve ./bin/wwwyalnızca uygulama sunucusu ve bağlantı noktası ayarlarının yazıldığı ve ara katman yazılımı ve yönlendirme gibi diğer her şeyin ./app.jsdosyada tanımlandığı bir dosya oluşturduğunu buldum .

Ancak bunun ne yaptığından emin değilim ./bin/www. Express 3.x'i kullandım ve her zaman aynı ./app.jsdosyada yönlendirme ve ara katman yazılımlarının yanı sıra sunucu ve bağlantı noktası ayarlarını tanımladım ve düğüm uygulamamı başlattım node app.js. Peki, kullanmanın anlamı ./bin/wwwnedir? Sunucu ve bağlantı noktası tanımını yalnızca diğerlerinden ayırıyor mu?

Şu anda, express-generator kullanarak paketi oluşturduğumda package.json, şu tanım içerir:

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

Ancak, node ./bin/wwwveya uygulamasını kullanarak başlatmam gerekip gerekmediğini merak ediyorum npm start. Uygulamamı başlatmak için hangi komutu çalıştırmalıyım?

Ayrıca, uygulamamı heroku'ya dağıtırken dosyaya ne yazmalıyım Procfile? Mı web: node app.jsyeter?


Yanıtlar:


131

In Express 3.0 , Normalde kullandığınız app.configure()(ya app.use()ihtiyacınız gerekli ortakatmanını kurmak). Belirttiğiniz ara katman yazılımları Express 3.0 ile birlikte gelir.

Misal:

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());

In Express 4.0 Ancak tüm katman böylece (siz gördükleri ayrı çağrılması gerekiyor, bunlar muhafaza ve (statik katman hariç) çekirdek Ekspres bağımsız güncellenebilir, böylece kaldırılmış app.js).

bin/Dizin size çeşitli tanımlayabilirsiniz bir konum olarak hizmet veren başlangıç komut dosyalarını . Bu www, ekspres uygulamayı web sunucusu olarak başlatmak için bir örnektir.

Nihayetinde, gibi farklı komut olabilir test, stopveya restart, vb bu yapıyı olması halinde her şeyi tıkınma olmadan, farklı başlangıç yapılandırmaları sağlar app.js.

Express uygulamanızı başlatmanın doğru yolu:

npm start

Bir Express 4.x uygulamasını Heroku'ya dağıtmak için şunu ekleyin Procfile:

web: npm start

Ya da sadece başlangıç ​​komut dosyanızı kullanabilirsiniz package.json, heroku bunu otomatik olarak kullanır, daha fazlasını buradan okuyun

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

6
Teşekkürler. Son iki paragrafa ilişkin mükemmel açıklamanızla, nihayet kullanım amacını anladım www. Neden bu şekilde adlandırıldığından emin değilim - belki de World Wide Web'den sonra?
Blaszard

1
@ NicolasS.Xu ExpressJS'in Github repo github.com/visionmedia/express adresinde , Hızlı başlangıç ​​bölümüne gidin
Andy

4
@ Neden "bin" denildi? Bunu ikili çalıştırılabilir dosyalarla ilişkilendiriyorum.
regularmike

2
@regularmike Sanırım, aynı zamanda 'çalıştırılabilir' komut dosyaları da olabilir (linux ortamında olduğu gibi)
Andy

2
@ Evet, uzun zaman önce yürütülebilir bir şey demek için evrimleşmiş gibi görünüyor. Genel olarak Python, Perl ve unix / linux'da yaygındır.
Regularmike

10

Express 3.x gibi düğüm uygulamaları standart olmayan başlangıç ​​dosyalarını kullanır app.js, ancak çalıştırmak için yanlış dosyadır.

package.json vardır

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

başlangıç ​​komut satırını belirtir. Önemsizdir çünkü potansiyel olarak sadece başlangıç ​​dosyasına giden bir yol değil, tam bir komut satırı içerir.


lütfen bu soruyu cevaplamama yardım eder misin? Teşekkür ederim!
Nicolas S.Xu

7
Neden bin deniyor? İkili dosya içermez. . .
Kinnard Hockenhull


1

Windows'ta şu komutu kullanın:

set DEBUG = myapp: * & npm start Sonra uygulamaya erişmek için tarayıcınıza http: // localhost: 3000 / yükleyin.


4
SO hoş geldiniz! Bunun eldeki soruyu gerçekten cevapladığını sanmıyorum. Orijinal Posterin sorduğu her şeyi tam olarak anlamak için lütfen soruyu tekrar okuyun.
Jake

0

Yukarıdakilerin hepsi iyi cevap verdi. Ancak node app.jssadece Express 3. * sürümleri gibi kullanmak istiyorsanız . Aşağıdakileri takip edebilirsiniz:

Express 4 oluşturucu tarafından oluşturulan app.js dosyası artık bir Node.js modülü olduğundan , artık bir uygulama olarak bağımsız olarak başlatılamaz (kodu değiştirmediğiniz sürece). Modül bir Node.js dosyasına yüklenmeli ve Node.js dosyası üzerinden başlatılmalıdır. Bu durumda Node.js dosyası ./bin/www'dir. Daha fazla bilgi için resmi belgeleri ziyaret edin .

Express uygulaması oluşturmak veya uygulamayı başlatmak için ne bin dizini ne de uzantısız www dosyası zorunlu değildir. Bunlar sadece jeneratör tarafından yapılan önerilerdir, bu yüzden bunları ihtiyaçlarınıza göre değiştirmekten çekinmeyin.

Www dizininden kurtulmak ve işleri “Express 3 yolunda” tutmak için module.exports = app; app.js dosyasının sonunda, aşağıdaki kodu yerine yapıştırın:

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

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

Sonra, değişim "start": "node ./bin/www"içinde package.json dosyası. O günden bu yana ./bin/www işlevselliğini tekrar app.js'ye taşıdınız. Şimdi, "start": "node app.js"ekspres uygulamanızı çalıştırmak için kullanmaya başlayın .


-1

bunu Procfile'a koyun ve çalışıp çalışmadığını web: node ./bin/www kontrol edin foreman start. Uygulama 5000 numaralı bağlantı noktasında mevcut olmalıdır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.