Comment séparer les routes et les modèles de app.js à l'aide de NodeJS et de l'Exprimer
Je suis de la création d'une application à l'aide d'un Noeud et de l'Exprimer. Cependant, je peux voir ça va vite devenir difficile à gérer toutes les routes qui sont placés à l'intérieur app.js
. J'ai placé tous mes modèles dans un sous-répertoire /models
.
Voici mon application actuelle de la structure:
app.js
models
-- products
-- customers
-- ...
public
views
node_modules
Dans app.js
:
var express = require('express'),
routes = require('./routes'),
user = require('./routes/user'),
http = require('http'),
path = require('path'),
EmployeeProvider = require('./models/employeeprovider').EmployeeProvider,
Products = require('./models/products').Products,
Orders = require('./models/orders').Orders,
Customers = require('./models/customers').Customers,
checkAuth = function(req, res, next) {
if (!req.session.user_id) {
res.send('You are not authorized to view this page');
} else {
next();
}
};
var app = express();
Puis un peu de configuration comme port
, views
annuaire, moteur de rendu, etc.
Plus bas app.js
j'ai les routes:
app.get('/product/edit', auth, function(req, res) {
Products.findAll(function(error, prds) {
res.render('product_edit', {
title: 'New Product',
products: prds
});
});
});
En haut, je suis d'assigner le contenu de models/products.js
à une variable, tout fonctionne très bien. Toutefois, en gardant toutes les routes à l'intérieur de app.js
n'est pas l'idéal. Mais si je déplace les routes de routes/product.js
et de la charge de la Products
modèles:
var prod = require('../models/products.js');
Je reçois un message d'erreur indiquant que l'objet n'a pas de méthode findAll
.
Ce que je fais mal? Comment puis-je supprimer des itinéraires à partir de app.js
?
- voir cette réponse stackoverflow.com/a/38718561/1153703
Vous devez vous connecter pour publier un commentaire.
Comme de l'express-4.x
Router
est ajouté à l'appui de votre cas.Exemple de expressjs site:
Puis dans app.js:
app.use('/calendar', require('./routes/x'));
?router
étaitrequired
.Comme je n'aime pas la répétition, voici ce que je fais:
Et chaque fichier dans les routes, c'est comme:
De cette façon, vous pouvez éviter les longues répétitif des listes comme celle-ci:
Edit: ces exemples supposent chaque ligne du fichier contient quelque chose comme ce qui suit:
Tous d'entre eux pourraient être monté à la "racine", mais ce qui pour eux est "root", est en fait un chemin d'accès spécifique donné à
app.use
, parce que vous pouvez monter de routes en chemins spécifiques (ce qui prend également en charge des choses comme spécifiant le chemin d'accès avec une regex, Express est assez nette en ce qui concerne ce que vous pouvez faire avec de routage).app.use('/', routes[i]);
seulement le trajet sur le '/' itinéraire? Le long de l'exemple que vous avez donné dans la fin est différente, c'est à dire qu'il estapp.use('/route', require('./routes/route'));
. J'espère qu'un sens.module.exports.router
et l'on me met sur la bonne piste avecmodule.exports = router;
app.use
d directement. Voir de cette façon: lorsque vous appelezapp.use('/', someRoute)
la racine desomeRoute
est fusionné sur la racine de l'application, de sorte que si l'itinéraire a été défini comme la montée à '/calendrier", vous aurez maintenant une route comme ça dans votre application. Vous pouvez créer des itinéraires avecexpress.Router()
et les monter plus tard (pas seulement sur"/", mais tout chemin) avecapp.use()
Je peux vous suggérer cette structure de fichier (selon Modulaire d'applications web avec Node.js et Express de tjholowaychuk):
user-api
etstatic-pages
exportation expressjs applications, vous pouvez facilement monter dans app.js.Dans
users
module, vous pouvez décrire certaines opérations d'Accès aux Données et à toutes les méthodes sur la manipulation avec l'Utilisateur de l'entité (par exemple, créer, mettre à jour, etc.). Notre API module permettra d'utiliser toutes ces méthodes.Et voici un exemple de code de app.js fichier (sans commune exprimer des choses, de ne monter les itinéraires des différents modules):
À utiliser vos modules de cette façon, vous devez démarrer votre application comme cette
NODE_PATH=modules node app.js
(j'ai mis cette ligne d'emballage.fichier json dans les scripts de la section).Voici un exemple de code de
users
module:index.js
model.js (avec Mangouste trucs pour exemple bien sûr!)
Et l'exemple de
user-api
module (ici est la partie principale de la réponse au sujet de la séparation des routes et des modèles).Et l'exemple de
static-pages
. Si vous n'allez pas construire une sorte de REPOS de l'interface, vous pouvez simplement créer plusieurs modules de rendu de pages seulement.Bien sûr, vous pouvez faire ce que vous voulez avec des modules. L'idée principale sur expressjs est d'utiliser un grand nombre de petites applications au lieu d'un seul.
Sur nodejs modules que vous pouvez lire stackoverflow et docs.
Espère que cette aide.
var users = require("users");
est à partir de ?