2014-04-30 3 views
1

Je vois beaucoup d'exemples où le code de routeur Node.js/express est organisé comme ceci:Comment organiser le code/logique avec Node.js/Express 3 et Mongoose (MongoDB)

// server.js

var cats = require('cats'); 
app.get('/cats', cats.findAll); 

// routes/cats.js

exports.findAll = function(req, res) { 
    // Lookup all the cats in Mongoose CatModel. 
}; 

Je suis curieux de savoir si ce serait bien de mettre la logique pour créer, lire, mettre à jour et supprimer les chats dans la mangouste CatModel comme méthodes? Donc, vous pourriez faire quelque chose comme cat.findAll(); Le modèle pourrait ressembler à ceci:

var Cat = new Schema({ 
    name: { 
    type: String, 
    required: true 
    } 
}); 

Cat.methods.findAll = function(callback) { 
    // find all cats. 
    callback(results); 
} 

Ensuite, vous pouvez utiliser dans votre routeur:

app.get('/cats', cats.findAll); 

Si, si en outre une logique/abstraction est nécessaire (pour traiter les résultats) alors on pourrait le faire en routes/cats.js.

Merci à l'avance.

Répondre

3

De toute évidence, votre architecture dépend entièrement de vous. J'ai trouvé que séparer mes routes (qui traitent la logique métier) et les modèles (qui interagissent avec la base de données) est nécessaire et très facile.

donc je habituellement quelque chose comme

app.js

var cats = require ('./routes/cats'); 
app.get('/api/cats', cats.getCats); 

routes/cats.js

var Cats = require ('../lib/Cats'); 

exports.getCats = function (req, res, next) { 
    Cat.get (req.query, function (err, cats) { 
    if (err) return next (err); 
    return res.send ({ 
    status: "200", 
    responseType: "array", 
    response: cats 
    }); 
    }); 
}; 

lib/Cat.js

var catSchema = new Schema({ 
    name: { 
    type: String, 
    required: true 
    } 
}); 

var Cat = mongoose.model ('Cat', catSchema); 

module.exports = Cat; 

Cat.get = function (params, cb) { 
    var query = Cat.find (params); 
    query.exec (function (err, cats) { 
    if (err) return cb (err); 
    cb (undefined, cats); 
    }); 
}; 

Alors cet exemple ne montre pas exactement un avantage, mais si vous aviez une route addCat, alors la route pourrait utiliser un appel de fonction "getCatById", vérifier que le chat n'existe pas, et l'ajouter. Cela aide aussi à nicher. Les routes peuvent également être utilisées pour désinfecter les objets avant de les envoyer, et peuvent également envoyer des ressources et des informations utilisées dans l'interface utilisateur qui ne sont pas nécessairement couplées à mongoose. Il permet également de réutiliser les interactions avec la base de données sur plusieurs itinéraires.

Questions connexes