2012-03-28 12 views
5

Sono nuovo nel mondo della Node.jsCollegare ed Express utils

Secondo questo argomento: What is Node.js' Connect, Express and “middleware”?
ho imparato che Connect faceva parte del Express

ho scavato un po 'nel codice, e ho trovato due file molto interessanti:

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

e migliori:

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

Questi due file sono pieni di funzioni utili e mi chiedevo come richiamarli correttamente.

Per quanto riguarda, in ./myProject/app.js, che è quello che faccio:

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

Ma ho trovato un po 'goffo, e che dire i miei file degli altri?

ad esempio, qui è uno dei miei percorsi:

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

e qui è il contenuto della myresources.js:

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? 
    } 
}; 

Come si può vedere nel commento dopo la res.send(400), mi chiedo se è possibile utilizzare la funzione badRequest che si trova nel file utils.js del modulo Connect.

E la bella funzione md5 nello stesso file?

Devo collocare questo hugly chiamata all'inizio del mio myresources.js loro ?:

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

utilizzare Oppure, c'è una soluzione più elegante (anche per la app.js)?

Grazie in anticipo per il vostro aiuto!

risposta

2

l'unico modo più elegante mi è venuta in mente è (supponendo espresso è all'interno della vostra radice "node_modules" cartella):

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

il nodo installazione su Windows, versione nodo 0.8.2


e un po 'di informazioni aggiuntive:

in questo modo non è necessario sapere dove ci si trova nel percorso ed essere costretti ad utilizzare i percorsi relativi (./ o ../), questo può essere fatto su qualsiasi file livello di nidificazione

ho messo tutti i miei moduli personalizzati all'interno della cartella principale "node_modules" (ho chiamato il mio cartella "custom_modules") e li chiamano in questo modo a qualsiasi livello di nidificazione:

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

Non ci si può aspettare che questa tecnica sia a prova di futuro. 'express @ 4.0.0' potrebbe cambiare completamente il modo in cui funziona internamente e per quanto ne sai potrebbe cadere' connect' (non probabile, ma ottieni il punto). E ancora, se dovessi includere 'connect' (la stessa versione usata da' express') nelle dipendenze del tuo progetto, questa tecnica non funzionerà. –

+0

@GauthamBadhrinathan Non prevedo connessioni rapide in qualunque momento presto :) Tuttavia, la connessione potrebbe facilmente cambiare la posizione dei file o di ciò che è contenuto in essi - il che IMHO è un pericolo molto più grande. questa tecnica dovrebbe funzionare anche se si include la connessione nelle dipendenze del progetto, il percorso punta ancora ad esprimere, quindi node.js andrà ad esprimere prima. dalla sezione node.js documentation (File Modules): * Senza un indicatore iniziale '/' o './ 'per indicare un file, il modulo è un "core module" o è caricato da una cartella node_modules. * http://nodejs.org/api/all.html#all_file_modules – Leonidaz

+0

Sì, sarebbe andato a 'express 'che è o un" core module "o è in" node_modules ". Ma se 'connect' viene aggiunto come dipendenza del progetto, non si troverà una directory chiamata' connect' * all'interno * della directory 'express/node_modules'. –

2

Se si desidera accedere direttamente a connect, suggerisco di installare connect come dipendenza del progetto, insieme a express. Quindi è possibile var utils = require('connect').utils.

+0

Installare un quadro tutto due volte, basta accedere ad alcune funzioni di utilità con 'require' più brevi non sembra più elegante ... –

+2

Quando si costruisce un progetto di grandi dimensioni, si scoprirà che si ha molta duplicazione tra i moduli. Ad esempio, ho diversi 'mkdirp',' async', 'eco' ecc. Non è un grosso problema. –

+0

Rispettare un [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself) "modello di progettazione" è un grosso problema per me. A questo punto, preferisco copiare/passato giustificare le funzioni di cui ho bisogno nel mio modulo utils. Ma non è molto ASCIUTTO, né elegante ... –

Problemi correlati