我开始学习 Node.js 和 Backbone。我想在服务器和客户端之间共享一些代码(与[1]和[2]相关)。更深入:
- 共享模型的默认值。默认值用于填充表单(客户端),而它们在服务器端强制执行
- 共享验证规则以便 DRY 并执行客户端/服务器验证
- 共享实例方法
所以我的想法是用一个factory
对象来封装通用代码(默认值、验证规则、公共实例方法),并factory
根据环境(Node.js 或 AMD 模块)适配对象。
这段代码又快又脏,可能不起作用。这是一个好方法还是只是浪费时间?
(function (factory) {
if (typeof exports === 'object') { // Node.js
var config = require('../config/config.json'),
Sequelize = require('sequelize'),
_ = require('underscore');
var User = {
receiveSms: {
type: Sequelize.BOOLEAN, allowNull: false
},
receiveNewsletter: {
type: Sequelize.BOOLEAN, allowNull: false
}
};
// Add defaultValue for each returned by
_.each(factory.defaults, function (value, key) {
if(_.has(User, key)) {
User[key].defaultValue = value;
}
});
module.exports = function () {
(new Sequelize(config.database, config.username, config.password))
.define('User', User);
};
} else if (typeof define === 'function' && define.amd) { // AMD
define(['backbone', 'uderscore'], function (Backbone, _) {
return Backbone.Model.extend(factory);
});
}
}(function () {
return { // To be adapted
defaults: {
receiveSms: false,
receiveNewsletter: true
}
}
}));