SORU
2 EKİM 2012, Salı


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
2 EKİM 2012, Salı


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

Read more about changes in Express 4.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • pain975

    pain975

    27 NİSAN 2008
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008