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

标签 javascript node.js backbone.js requirejs amd

我开始学习 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/

相关文章:

javascript - JSON 从 url 到 PHP 表

javascript - 实现 "scroll to top"按钮

javascript - 使用 bcrypt-node 时没有显示回调错误

javascript - 使用 node.js 提供来自 Backbone.js 应用程序的内容以搜索爬虫以进行 SEO

javascript - Backbone.js 主从 View 、导航问题(包括 jsfiddle)

javascript - 仅在提交的表单上添加一个 div

将具有相同属性的构造函数对象推送到数组的 JavaScript 函数

javascript - Jade.js 与 jQuery

node.js - Socket.io 和现代浏览器不工作

javascript - 在 pushState 单页应用程序中将 URL 片段 (#) 用于模态视图