Задать вопрос
@seth2810

Существуют ли ORM с возможностью работы поверх HTTP на Node.js?

Добрый день уважаемые постояльцы ресурса. Недавно появилась необходимость вынести хранение данных на сервер с API, взаимодействие, с которым должно осуществляться из Node.js приложения посредством HTTP запросов, по следующей схеме: Front(client) -> Node.js(app) -> API(database). И поэтому, т.к. сервер и клиент (приложение Node.js) будут манипулировать схожими типами объектов, возникла необходимость сделать что-то вроде ORM, которое будет отображать свои запросы в удаленные запросы к серверу, через HTTP клиента. В связи с этим хотелось бы поинтересоваться у сообщества, встречались ли кому-нибудь инструменты со схожим функционалом, желательно, чтобы в реализации имелись встроенные механизмы валидации полей модели?

Интересует что-то вроде этого https://www.npmjs.org/package/symbiosis.js
  • Вопрос задан
  • 2456 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@seth2810 Автор вопроса
Loopback
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
zoonman
@zoonman
⋆⋆⋆⋆⋆
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
mongodb и еще нескоторые базы данных имеют REST API. так же есть mongolabs: docs.mongolab.com/restapi

соответственно ORM для нее https://www.npmjs.org/package/mongolab-provider
Ответ написан
Комментировать
Если монго будете выбирать, вот пример для [Class](https://github.com/atmajs/classjs). Правда http сервис нужно отдельно писать, но в основном это и так надо, потому что редко можно обойтись CRUD методами, обычно логика поведения посложнее.
// entity/user.js
var User = Class('User', {
    Base: Class.Serializable({
        activity: Date
    }),
    Validate: {
        activity (date) {
            if (date.getFullYear() !== new Date().getFullYear()) 
                return 'Current year expected';
        }
    },
    _id: null,
    activity: null,
    points: 0,
});
// client/user.js
Class.patch('User', {
    Store: Class.Remote('/rest/user/:_id')
})
// server/user.js
Class.patch('User', {
    Store: Class.MongoStore.Single('users', {
        indexes: [ { date: 1} ]
    })
});

// Browser OR NodeJS
var user = new User({
    _id: 'foo',
    activity: new Date
});
user.save().done(() => {});
//
user
    .patch({
        $inc: {
            points: 2
        }
    })
    .done(() => {})
//
User.fetch({ _id: 'foo' }).done(user => {});
User.fetch({ points: '>10' }).done(user => {});

// Server, http endpoint sample
module.exports = atma.server.Service({
    '$post /' (req) {
        var user = new User(req.body),
            error = Class.validate(user);
        if (error) 
            return this.reject(error);
        
        user.save().pipe(this);
    }
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы