2012-03-28 29 views
5

bu konu göre Bağlan ve Ekspres utils

node.js

dünyasında yeniyim: What is Node.js' Connect, Express and “middleware”?
Ben Connect ben kodunda biraz kazdık Express

parçası olduğunu öğrendik,

./myProject/node_modules/express/lib/utils.js 

ve daha iyi:

ve ben iki çok ilginç dosyalar bulundu

Bu iki dosya yararlı işlevlerle doludur ve bunları doğru şekilde nasıl çağırmak istediğimi merak ediyordum.

var express = require('express') 
    , resource = require('express-resource') 
    , mongoose = require('mongoose') 
    , expresstUtils = 
     require('./node_modules/express/lib/utils.js'); 
    , connectUtils = 
     require('./node_modules/express/node_modules/connect/lib/utils.js'); 

Ama ya benim diğerleri dosyalar hakkında biraz hantal ve bulundu:

Bildiğim kadarıyla, ./myProject/app.js yılında, yapmak ne?

mesela, işte benim yollarından biridir:

myResources = app.resource(
       'myresources', 
       require('./routes/myresources.js')); 

ve burada myresources.js içeriği şöyledir:

exports.index = function(req, res) 
{ 
    res.render('./myresources.jade', { title: 'My Resources' }); 
}; 

exports.show = function(req, res) 
{ 
    fonction resourceIsWellFormatted(param) 
    { 
    // Here is some code to determine whether the resource requested 
    // match with the required format or not 
    // return true if the format is ok 
    // return false if not 
    } 

    if (resourceIsWellFormatted(req.params['myresources'])) 
    { 
    // render the resource 
    } 
    else 
    { 
    res.send(400); // HEY! what about the nice Connect.badRequest in its utils.js? 
    } 
}; 

Eğer res.send(400) sonra yorumunda görebileceğiniz gibi, ben olabileceğimi düşünmeye Connect modülünün utils.js dosyasında bulunan badRequest işlevini kullanmak mümkündür.

Aynı dosyada güzel md5 işlevinden ne haber?

Bu hugly onları ?:

var connectUtils = 
     require('../node_modules/express/node_modules/connect/lib/utils.js'); 

kullanmak benim myresources.js başında çağrı yerleştirmek zorunda ya, (hatta app.js için) daha zarif bir çözüm yoktur musunuz?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

2

i (ekspres senin kökün içinde "node_modules" klasörü olduğunu varsayarak) olduğu ortaya çıktı ancak daha zarif yolu:

require("express/node_modules/connect/lib/utils"); 

kurulum pencerelerde olduğu düğüm, düğüm sürüm 0.8.2


ve ekstra bilgi biraz:

Eğer yolunda nerede olduğunu bilmek ve göreli yollar (./ veya ../), bu konuda yapılabilir kullanmak zorunda gerekmez bu şekilde herhangi bir dosya yuvalama seviyesi.

i kök "node_modules" klasörü içindeki tüm özel modülleri (benim klasör "custom_modules" adında) ve yuvalama herhangi bir düzeyinde bu şekilde onları çağırır koydu: sadece iki kez bir bütün çerçeveyi takın

require("custom_modules/mymodule/something") 
+2

Bu tekniğin geleceğe dönük olmasını bekleyemezsiniz. 'express @ 4.0.0', dahili olarak nasıl çalıştığını tamamen değiştirebilir ve bildiğiniz her şey için 'bağlan' seçeneğini bırakabilir (büyük olasılıkla değil, fakat noktayı alırsınız). Ve yine, projenizin bağımlılıklarına 'connect' ('express' tarafından kullanılan aynı sürümü) eklemeniz gerekiyorsa, bu teknik çalışmayacaktır. –

+0

@GauthamBadhrinathan En kısa sürede herhangi bir zamanda bağlantı kurmayı ifade etmemeyi tercih etmiyorum :) Ancak, bağlantı kendi dosyalarının yerini ya da içinde ne olduğunu kolayca değiştirebilir - hangi IMHO çok daha büyük bir tehlike. Bu teknik, projenizin bağımlılıklarına bağ eklemeniz durumunda hala çalışmaya devam etmelidir, yol hala ifade etmeyi işaret eder, bu nedenle node.js ilk önce ifade edecek. Node.js belgelerinden (Dosya Modülleri) bölümü: * Bir '/' veya 'olmadan./ 'bir dosyayı belirtmek için, modül ya bir "çekirdek modülüdür" ya da bir node_modules klasöründen yüklenir. * http://nodejs.org/api/all.html#all_file_modules – Leonidaz

+0

Evet, ifadeye gider "bir" çekirdek modül "veya" node_modules "içinde. Ancak 'connect' bir proje bağımlılığı olarak eklenirse, 'express '/ node_modules' dizininde' connect' * adlı bir dizin bulamazsınız. –

2

Doğrudan connect erişimini kullanmak istiyorsanız, projenizin bağımlılığı olarak'u express ile birlikte yüklemenizi öneririm. Sonra var utils = require('connect').utils yapabilirsiniz.

+0

Bazı fonksiyon fonksiyonlarına daha kısa 'gereksinim' ile erişmek için daha zarif görünmüyor… –

+2

Büyük bir proje oluşturduğunuzda, modüller arasında çok fazla çoğaltmanız olduğunu göreceksiniz. Örneğin, birkaç mkdirp, 'async', eco' vb. Var. Büyük bir anlaşma değil. –

+0

Bir [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself) "tasarım desenine" saygı duymak benim için büyük önem taşımaktadır. Bu noktada, ihtiyaç duyduğum işlevleri kopyalayıp/yapıştırmak için kendi araç modülümde kullanıyorum. Ama çok kuru ya da zarif değil… –