gpt4 book ai didi

javascript - 在服务器和客户端之间共享 JavaScript 模型代码,这种方法有效吗?

转载 作者:行者123 更新时间:2023-11-30 18:10:09 25 4
gpt4 key购买 nike

我开始学习 Node.js 和 Backbone。我想在服务器和客户端之间共享一些代码(与 [1][2] 相关)。更深入:

  • 共享模型的默认值。默认值用于填充表单(客户端),而它们在服务器端强制执行
  • 共享验证规则以实现DRY并执行客户端/服务器验证
  • 共享实例方法

所以我的想法是使用一个factory对象来封装公共(public)代码(默认值、验证规则、公共(public)实例方法)并根据环境适配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
}
}
}));

最佳答案

我认为使用 require.js 是更好的解决方案(特别是对于在多个文件中使用像下划线这样的框架)。您应该只对在运行时发生变化的对象使用工厂。例如购物车(但即使在这个例子中,我认为使用主干集合更合适,该集合在实例化时作为参数提供给您的函数)。在此处查看更多信息:http://requirejs.org/docs/node.html

关于javascript - 在服务器和客户端之间共享 JavaScript 模型代码,这种方法有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com