Comment avez-vous modulariser Node.JS w/Express
Je suis en train de modulariser mon node.js application (à l'aide d'exprimer cadre). L'ennui que j'éprouve lors de la définition de mes itinéraires.
Je ne suis plus en mesure d'extraire les données que j'envoie à la poste. (req.le corps n'est pas défini). Cela fonctionne bien si c'est tout dans le même fichier. Ce que je fais mal ici, et quelle est la meilleure façon de modulariser le code dans node.js?
Mon app.js
require('./routes.js').setRoutes(app);
Mon route.js
exports.setRoutes = function(app){
app.post('/ask', function(req, res, next){
time = new Date();
var newQuestion = {title: req.body.title, time: time.getTime(), vote:1};
app.questions.push(newQuestion);
res.render('index', {
locals: {
title: 'Questions',
questions: app.questions
}
});
});
OriginalL'auteur Kiran Ryali | 2011-02-20
Vous devez vous connecter pour publier un commentaire.
Une meilleure approche:
Créer un routes.js fichier qui contient:
Puis, à partir de l'intérieur de votre server.js (ou cependant vous avez commencé votre serveur), vous auriez besoin en tant que tel:
De cette façon, vous ne créent pas des variables globales qui apportent avec eux toute une série de questions (testabilité, collision, etc.)
De cette façon, fonctionne très bien, j'ai trouvé un exemple plus complet: stackoverflow.com/questions/6059246/...
comment accéder à l'app à partir de l'index du contrôleur?
Je n'ai pas, vous ne devriez pas avoir besoin de. Ce que vous voulez accomplir dans la voie qui doit le serveur de l'objet? La fonction index recevrez req, res, et à côté des arguments qui devrait être tout ce dont vous avez besoin.
pourquoi app.tous les( ) à la place de l'app.get( )?
OriginalL'auteur ctide
Je réalise que quelqu'un a déjà répondu, mais voici ce que je fais de toute façon.
app.js :
./routes/index.js :
Peut-être que quelqu'un va trouver cette approche utile.
require
est une fonction synchrone lorsquefs.readdir
est asynchrone. Donc, chaque fois que l'ordre d'exécution de vos modules sera différent lorsque vous exécutez votre application. Mais vous pouvezsort
fichiers de tableau avant deforEach
pour le rendre déterminé. Vous pouvez aussi asyncly précharger les fichiers derequire.cache
pour le rendre plus rapide pour commencer si votre application a besoin de beaucoup de redémarrage.OriginalL'auteur OneOfOne
Mon problème est que j'ai été déclarer application dans le mauvais sens. Au lieu de
var app = module.exports = express.createServer();
, il aurait juste étéapp = express.createServer();
Et puis tout ce que je devais faire dans mon app.js a
require('./routes.js');
. Maintenant, le fichier de routes a accès à l'application variable et maintenant je peux simplement déclarer itinéraires normalement dans le fichier de routes.(routes.js)
Il serait bon de savoir que pourquoi cette "mauvaise pratique" est la configuration par défaut fournie par une installation rapide 🙁 Évidemment globales sont moins grands, mais c'est le modèle nous les noobs sont fournis.
OriginalL'auteur Kiran Ryali
mondial "app" pour moi (en général). Si vous connaissez l'application ne sera pas require()d, et si vous n'êtes pas maladroit, c'est beaucoup plus facile de travailler avec
re-affectation 😀 donc, si votre application tourne autour des "applications" comme une ressource, et vous êtes susceptible d'utiliser des "var app =" beaucoup j'ai vraiment ne dirais pas ça haha
OriginalL'auteur tjholowaychuk
exemple dans app.js
alors, vous en votre lib/dossier utilisateurs, de créer des fichiers ( index.js,utilisateur.ejs,etc). utilisation index.js par défaut le module de chargement
//index.js
var express = require('express');
var app = module.les exportations = express();
J'ai fait un exemple de Modulaire nœud.jes + Bootstrap ici : Nodemonkey ou d'un tuteur ici ici
OriginalL'auteur ngakak