从Node中使用Breeze.js EntityManager

Using Breeze.js EntityManager from within Node

本文关键字:Breeze js EntityManager Node      更新时间:2024-03-03

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

我们目前有一个使用Node.js、MongoDB和Breeze.js微风MongoDB模块实现的数据服务。

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

我需要创建另一个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=ng区域

理论上我不需要角度,但如果不存在角度,我会得到额外的误差。

我可能能够调试这个特定的问题,但它需要详细地遍历Breeze.js代码,并可能对其进行修改以修复。很好奇是否有其他人能做到这一点。

我现在正在Node中运行Breeze。它过去在没有任何修改的情况下工作得很好,但在几个版本前,他们添加了一个检查它是否在浏览器中运行。。。所以现在我手动删除该复选框:-)

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

为了让它在浏览器中运行,我唯一需要更改的就是添加一个伪ajax处理程序,将其委托给我的瘦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);

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