2014-01-16 6 views
0

Я начинаю свое приключение с помощью node, express и nodejs (я пришел из PHP env). Хотя большая часть материала довольно проста, я хочу, чтобы мои модели были чистыми, и я не могу понять, как отделить материал проверки, когда он становится сложным.Область проверки модели Mongoose

Моя модель продукта:

var mongoose = require('mongoose'); 
var schema = new mongoose.Schema({ 
    title: String, 
    content: String, 
    update_date: Date, 
}); 

var model = mongoose.model ('Page', schema); 

exports = module.exports = function (db) { return db.model('Item');}; 

Мои вопросы:

  1. Есть ли способ (экспресс-расширение) для обработки сценариев проверки/областей (аналогично, как и в ROR и Yii) ... Примеры областей проверки:
    • в поле «создать» поля области видимости, содержимое должно быть необходимо
    • в области «обновления» Поле UPDATE_DATE должно быть обязательным и подтверждено с датой типа
    • в «ясном» рамки полого содержания и UPDATE_DATE подтверждено как пустые
  2. ли вы разделить мангуст модель (дб abstration) и бизнес-модель в экспрессе?

ответ

1

Отъезд 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 начал, а затем проект изменился на протяжении многих лет до его текущего состояния).

Смежные вопросы