2013-12-04 3 views
4

Я заинтересован в возможности использования возможностей Breeze.js EntityManager и запросов в службе консоли узла для доступа к удаленной службе данных, которая предоставляет конечную точку RESTful, совместимую с BreezeJS/OData.Использование Breeze.js EntityManager изнутри узла

В настоящее время у нас есть Служба данных, реализованная с использованием Node.js, MongoDB и модуля Breeze.js breeze-mongodb.

У нас есть клиенты с веб-браузером, которые обращаются к MondgoDB, используя клиентский API Breeze.js (EntityManager) и службу данных, описанную выше.

Мне нужно создать еще одну службу Node.js, которая может получить доступ к той же базе данных MongoDB, что и веб-браузер, размещенный клиентами, и для согласованности/простоты я хотел бы использовать тот же API acceess данных, что и в Интернете браузер.

Кто-нибудь экспериментировал с этой конфигурацией?

Я экспериментировал с загрузкой Breeze и его зависимостей с использованием инфраструктуры модуля Node.js, но получаю ошибки, когда Breeze пытается инициализировать Angular как обработчик ajax. установлена ​​Угловая и сконфигурирован как модуль узла зависимость, но я получаю сообщение об ошибке брошенной:

Ошибка: [$ Инжектор: nomod]? http://errors.angularjs.org/1.2.2/ $ форсунки/nomod p0 = ngLocale

В теории я не должна нужен угловой, но я получаю дополнительные ошибки, если угловой нет.

Возможно, у меня есть возможность отладить эту проблему, но она потребует подробного изменения кода Breeze.js и, возможно, его изменения для исправления. Было любопытно, если кто-то еще это сделал.

ответ

0

Это хороший вопрос. Мы на самом деле не пытались запустить Breeze в узле, но ваш случай использования интересен. Это звучит как идеальный предмет для Breeze User Voice. Мы серьезно относимся к этим предложениям.

+0

Спасибо. Добавили запрос функции здесь: [link] (http://breezejs.uservoice.com/forums/173093-breeze-feature-suggestions/suggestions/5136720-access-entitymanager-from-node-js-as-server-side -d) – user2684114

2

В настоящее время я запускаю Бриз в узле. Он работал отлично, без каких-либо изменений, но несколько версий назад они added a check, что он запущен в браузере ... так что теперь я вручную удаляю эту проверку :-)

Мой прецедент немного отличается: Я запускаю бриз на сервере, чтобы я мог использовать ту же бизнес-логику, что и в клиенте, и просто иметь действительно очень тонкий слой между breezejs и 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); 
Смежные вопросы