在Node中使用Breeze.js EntityManager

时间:2013-12-04 18:38:51

标签: javascript node.js mongodb breeze

我有兴趣能够在节点控制台服务中使用Breeze.js EntityManager和查询功能来访问公开符合BreezeJS / OData的RESTful端点的远程数据服务。

我们目前使用Node.js,MongoDB和Breeze.js breeze-mongodb模块实现数据服务。

我们有使用Breeze.js客户端API(EntityManager)和上述数据服务访问MondgoDB的Web浏览器托管客户端。

我需要创建另一个Node.js服务,该服务可以访问Web浏览器托管客户端所执行的相同MongoDB数据库,为了保持一致性/简单性,我想使用与我在Web浏览器中使用的相同的数据加速API

有没有人尝试过这种配置?

我尝试使用Node.js模块基础结构加载Breeze及其依赖项,但是当Breeze尝试将Angular初始化为ajax处理程序时,我遇到了错误。 Angular已安装并配置为节点模块依赖项,但我收到错误:

错误:[$ injector:nomod] http://errors.angularjs.org/1.2.2/ $ injector / nomod?p0 = ngLocale

理论上我不需要角度,但如果没有Angular,我会得到额外的错误。

我可能能够调试这个特定的问题,但它需要详细介绍Breeze.js代码并可能修改它来修复。很好奇,如果其他人已经让这个工作。

2 个答案:

答案 0 :(得分:2)

我现在正在Node中运行Breeze。它曾经工作得很好,没有任何修改,但在几个版本之前它们added a check它在浏览器中运行...所以现在我手动删除该检查: - )

我的用例有点不同:我在服务器上运行breeze,这样我就可以使用与客户端相同的业务逻辑,并且在breezejs和DB之间只有一个非常薄的层

我需要更改以使其在浏览器中运行的唯一方法是添加一个假的ajax处理程序,该处理程序委托给我的skinny DB包装器 - 您可以同样委托其他任何东西,包括您现有的API。

    var ctor = function () {
        this.name = 'node';
        this.defaultSettings = { };
    };

    ctor.prototype.initialize = function () {
    };
    var query = require('../../../../server/db/query');

    ctor.prototype.ajax = function (config) {
        if (config.url === '/api/all') {
            query.get()
                .then(function (result) {
                    var httpResponse = {
                        data: result,
                        status: '400',
                        getHeaders: undefined,
                        config: config
                    };
                    config.success(httpResponse);
                })
                .otherwise(function (error) {
                    var httpResponse = {
                        data: '',
                        status: '500',
                        getHeaders: undefined,
                        error: error,
                        config: config
                    };
                    config.error(httpResponse);
                });
        } else if (config.url === '/api/SaveChanges') {
            query.save(JSON.parse(config.data))
                .then(function (result) {
                    var httpResponse = {
                        data: result,
                        status: '400',
                        getHeaders: undefined,
                        config: config
                    };
                    config.success(httpResponse);
                })
                .otherwise(function (error) {
                    var httpResponse = {
                        data: '',
                        status: '500',
                        getHeaders: undefined,
                        error: error,
                        config: config
                    };
                    config.error(httpResponse);
                });
        }


    };

    breezejs.config.registerAdapter('ajax', ctor);
    breezejs.config.initializeAdapterInstance('ajax', 'node', true);

答案 1 :(得分:0)

这是一个很好的问题。我们实际上没有尝试在Node中运行Breeze,但您的用例很有趣。这听起来像Breeze User Voice的完美项目。我们认真对待这些建议。