Отъезд express-validator
, который позволит вам выполнять валидацию на ваших индивидуальных маршрутах (контроллеры для наклонного MVC).
Хотя вышеуказанные работы, mongoose
дает вам большую гибкость и уже поставляется с предустановленными механизмами валидации. Если вам не нужно ДЕЙСТВИТЕЛЬНО, нет смысла перестраивать эту функцию, и для этого потребуется много шума на ваших маршрутах. Я бы подумал о том, чтобы homerolling с родным драйвером MongoDB и вашей собственной пользовательской логикой, если вы чувствуете иное - его действительно не так сложно работать с родным драйвером, но если проект будет расти, mongoose
дает вам множество надежных функций, которые вы не захочет справляться с собой.
Несмотря на то, что большинство онлайн-моделей показывают модели mongoose в одном большом файле, относительно легко (и предпочтительнее) разделить ваши модели на логические части. Это, как правило, как настроить вещи:
models/
User/
index.js
statics.js
methods.js
validators.js
middleware.js
routes/
views/
Внутри models/User/index.js
, которые могут потребоваться в качестве require('./models/User')
, мы создаем нашу схему и добавить немного клея код для нашего файла расщепления:
var mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
name: String,
password: String,
role: String
});
userSchema.statics = require('./statics');
userSchema.methods = require('./methods');
// This will go through each exports in the validators file and attach
// the exported function as a validator. You're validators file should
// name each validator after the field in which it intends to validate.
// See below for example validators file.
var validators = require('./validators');
Object.keys(validators).forEach(function (validator) {
userSchema.path(validator).validate(validators[validator]);
return;
});
// Do the following for each type of middleware you use in the model
var preSave = require('./middleware').preSave;
preSave.forEach(function (middleware) {
userSchema.pre('save', middleware);
return;
});
module.exports = mongoose.model('User', userSchema);
Тогда мы можем настраивает наш validators.js
файл выглядеть следующим образом:
exports['name'] = function() { /* validation code here */ };
exports['password'] = function() { /* validation code here */ };
exports['role'] = function() { /* validation code here */ };
//etc, etc, etc.
Вы можете взять все этот шаг вперед прокатки плагина, чтобы обеспечить этот интерфейс вы без всех шаблонов. Я не пошел по этому пути еще, но разработки плагинов для mongoose
супер просто: http://mongoosejs.com/docs/plugins.html
Имейте в виду, что express
не смоделированы после RoR или Yii. Синатра, в рубине, находится ближе всего к express
за пределами мира nodejs. (Я считаю, что моделирование после Sinatra - это то, где TJ начал, а затем проект изменился на протяжении многих лет до его текущего состояния).