Если монго будете выбирать, вот пример для [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);
}
})