随着bookshelf.js,我如何更新primefaces模型logging?

我与JOB模型和许多TASK有一对多的关系。 我有一个单独的任务的路线,我从中获取TASK模型显示,并从其JOB模型的一些数据。 当我请求一个任务时,我需要更新locking的和一个user_id字段,以便我可以locking任务并显示locking的人员,以便其他用户无法访问该任务视图。 因此,我需要保证任务已locking= 0,并立即用时间戳更新该字段。

我目前的路由器代码是:

var route_task = function(req, res, next) { new Model.Task({id: req.params.id}).fetch(withRelated: ['jobs']}) .then(function(task) { if (!task) { res.status(404); res.render('404_tpl'); return; } if (task.get('locked') !== 0) { res.status(403); res.render('403_tpl', {title: '403 - Access Denied - Task is locked'}); return; } else { /* I would update it here, but there's a slim */ /* chance someone else can come in and select */ /* the task. */ } /* .. I set some res.locals vals from my task here .. */ var jobs = task.related('jobs'); jobs.fetch().then(function(job) { /* .. I set some res.local vals here from my jobs .. */ switch (task.get('task_type')) { case 0: res.render('task_alpha_tpl'); break; /* ... */ } }); }) } 

当我打我的路由器为一个特定的任务ID,我非常想要select*其中tasks.id = id和locking= 0,然后设置locking与当前的时间戳,但是,我需要能够确定是否logging那个ID不存在,或者如果它确实存在,但是被locking了。

我希望这是有道理的。 我来自C和PHP世界,所以我正在慢慢学习asynchronous编程。

我想你应该在交易中做到这一点,我猜如果你想要价值不变,我不认为你应该在客户端使用信号量或其他东西来模拟一个关键的部分或在这个思维的东西。

这个问题的通用解决scheme是以下列forms运行:

 UPDATE task SET locked=1,user=? WHERE job=? AND locked=0 

然后检查更新实际上修改了至less一行。 如果你在node.js中这样做,那么我会做这样的事情:

 Tasks.forge().where({job: req.param('code'), locked:0}).save({locked:1},{method:"update"});