我有兴趣能够在节点控制台服务中使用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代码并可能修改它来修复。很好奇,如果其他人已经让这个工作。
答案 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的完美项目。我们认真对待这些建议。