Node.js / Express.js - Nasıl uygulamayı yapar.router iş?
app.router
sordum önce katman ile çalışırken en az olur bence ne açıklamam gerektiğini düşünüyorum. Katman kullanmak için işlevi app.use()
. Katman çalıştırıldığında, ya da next()
kullanarak bir sonraki ara katman veya daha fazla katman denir bunu yapacaktır. Hangi katman aramalarıma ben sipariş ver bazı diğer katman katman bağlıdır, çünkü bu önemlidir, ve sonuna bazı katman bile denilebilir anlamına gelir.
Bugün benim uygulama üzerinde çalışıyordum ve benim sunucu arka planda çalışan vardı. Bazı değişiklikler yapmak ve benim sayfayı yenileyin ve değişiklikleri hemen görmek istedim. Özellikle, benim düzen değişiklikleri yapıyordum. Cevap için Yığın Taşması ve this question buldum araştırdım o iş için alamadım. express.static()
require('stylus')
altında olduğundan emin olun diyor. Ama bu OPERASYON kod bakarken, katman yaptığı aramalar sonunda app.router
yaptığı çağrı vardı gördüm, ve neden öyle olduğunu anlamaya çalıştım.
Express.js benim uygulama (sürüm 3.0.yaptığımda 0rc4), kullanılan komut express app --sessions --css stylus
ve benim app.js app.router
Her ikisi de yukarıda express.static()
benim kod geldi kurulum dosyası require('stylus')
çağırır. Bana öyle geliyor ki, eğer zaten bu şekilde Kur gelirse, o zaman bu şekilde devam etmeli.
Kalem benim değişiklikleri görebilmem için yeniden düzenlenmesi kodum sonra, bu gibi görünüyor:
app.configure(function(){
//app.set() calls
//app.use() calls
//...
app.use(app.router);
app.use(require('stylus').middleware(__dirname '/public'));
app.use(express.static(__dirname '/public', {maxAge: 31557600000}));
});
app.get('/', routes.index);
app.get('/test', function(req, res){
res.send('Test');
});
İlk adım önemli hatta benim kod app.router
için neden bulmaya olacağına karar verdim. Ben yorumladı, benim uygulama başladı /
gezilebilir. Index sayfama gayet güzel sergiledi. Hmm, benim rotalar yönlendirme (yollar.dosya verme, çünkü ben de işe yaradı belki dizin). Yani /test
navigasyon gelecek ve ekranda Test sergiledi. TAMAM Haha, app.router
ne yaptığı hakkında hiçbir fikrim yok. Benim kod dahil olup olmadığını, benim yönlendirme gayet iyi. Kesinlikle ben bir şey eksik.
İşte Benim Sorum:
Biri app.router
, önemi nedir, dünyanın en hızlı büyüyen telefonlarıma yerleştirmek gerekir nerede açıklayabilir misiniz? Ayrıca eğer express.static()
ile ilgili kısa bir açıklamam var eğer iyi olurdu. Söyleyebileceğim kadarıyla, express.static()
benim bilgi bir önbellek ve uygulama istenen sayfayı bulabilecek mi, eğer varsa görmek için önbelleği denetler.
CEVAP
Not:Bu İfade sürüm 2 ve 3'te nasıl çalıştığını açıklar. Express 4 hakkında daha fazla bilgi için bu yazının sonuna bakınız.
static
sadece hizmet vermektedir dosyaları (statikkaynaklar) disk. Sen bir yol ver (bazen bağlama noktası olarak adlandırılır), ve dosyaları bu klasöre hizmet vermektedir.
Örneğin, express.static('/var/www')
dosyaları bu klasöre hizmet verecek. Yani http://server/file.html
Düğüm sunucu isteği /var/www/file.html
hizmet verecek.
router
yolları çalışan kod. app.get('/user', function(req, res) { ... });
, ne zaman aslında isteği işlemek için geri arama işlevini çağırır router
.
Şeyler 12 ** geçmesi amacıyla her katman bir isteği işlemek için fırsat verilir sırasını belirler. Eğer varsa, örneğin, bir statik dosya klasörü ve bir rota test.html
adı:
app.get('/test.html', function(req, res) {
res.send('Hello from route handler');
});
Hangisi bir istemci http://server/test.html
isteyen gönderiliyor? Hangisi katman 16* *ilk verilir.
Eğer bunu yaparsanız:
app.use(express.static(__dirname '/public'));
app.use(app.router);
Sonra diskteki dosya servis edilir.
Eğer başka bir şekilde yaparsanız,
app.use(app.router);
app.use(express.static(__dirname '/public'));
Güzergah işleyicisi isteği alır ve "rota Merhaba işleyicisi" tarayıcıya yollanıyor. sonra
Genellikle, yönlendirici koymak istiyorumyukarıdastatik kazara adında bir dosya yolları bir geçersiz kılabilir mi o kadar katman.
Dikkat etmezsen açıkça use
router
, örtülü olarak eklendi Express noktada sizin belirlediğiniz bir rota (bu yüzden yollar hala çalıştığı halde sen diye app.use(app.router)
).
Bir yorumcu bana hitap etmemiş static
router
emrini brought up bir nokta daha var: uygulamanızın genel performans üzerindeki etkisi.
static
yukarıda 24* router
*başka bir nedeni performansını optimize etmek için. Eğer static
ilk koyun, sonra her istek üzerine sabit disk veya dosyanın var olup olmadığını görmek için vuracaksın. quick test, bu yükü boş bir sunucuda ~1ms olarak gerçekleşti. (Bu rakam çok istekleri disk erişimi için yarışacağı, yük altında daha yüksek olması muhtemeldir.)
router
ilk olarak, bir istek bir yol tutmak asla disk isabet, değerli milisaniye kurtarmak için vardır.
Tabii ki, static
'In Tepegöz. azaltmak için yollar vardır
En iyi seçenek, belirli bir klasör altında statik kaynaklar için. (/static
YANİ) o zaman tek yol /static
ile başlatıldığında çalışacak şekilde bu yolu static
montaj:
app.use('/static', express.static(__dirname '/static'));
Bu durumda, router
yukarıdaki bu koymak istiyorum. Bu diğer katman işleme eğer bir dosya varsa router/önler, ama dürüst olmak gerekirse, o kadar çok kazanacaksınız şüpheliyim.
Ayrıca sık istenen dosyaların disk vurmak zorunda değilsiniz, böylece bellek statik kaynakları önbelleğe staticCache
kullanabilirsiniz. (Uyarı:staticCache
will apparently be removed gelecekte.)
Ancak, sanmıyorum staticCache
önbelleğe olumsuz cevaplar (ne zaman bir dosya yok), öyle değil mi yardım ederseniz bıraktın staticCache
yukarıda router
olmadan montaj için bir yol.
Performans ile ilgili tüm sorular gibiölçü ve kriter gerçek dünya uygulaması(yük altında) darboğazlar yeri görmek için.
4 Express
Express 4.0kaldırırapp.router
. Katman (app.use
) ve güzergah (app.get
ark) şimdi hangi eklenir tam olarak sırayla işlenir.
Diğer bir deyişle:
Tüm yönlendirme yöntemleri göründükleri sırayla eklenecektir. Gerekirdeğil*43.* Bu İfade ile en yaygın sorunu ortadan kaldırır.
Diğer bir deyişle,
app.use()
app[VERB]()
karıştırma çalışacaktam olaraksırayla denir.app.get('/', home); app.use('/public', require('st')(process.cwd())); app.get('/users', users.list); app.post('/users', users.create);
Nasıl (sorgu dizesi) Node.js üzerinde ...
Nasıl Express/Node.js içinde bir İSTAS...
Nasıl kendi süreci gibi node.js bir uy...
Nasıl erişim ELDE Express.js ya Node.j...
Nasıl Windows üzerinde derin node_modu...