Javascript 使用mongoose重复提交数据库
我是node.js的新手,有些命令被复制时会出现间歇性问题。 我认为这可能与我试图将我的db交互与我的代码的其余部分分离开来,而我没有正确地将其隔离开来这一事实有关。我有一个名为transaction.js的文件,如下所示Javascript 使用mongoose重复提交数据库,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我是node.js的新手,有些命令被复制时会出现间歇性问题。 我认为这可能与我试图将我的db交互与我的代码的其余部分分离开来,而我没有正确地将其隔离开来这一事实有关。我有一个名为transaction.js的文件,如下所示 var mongoose = require('mongoose'); mongoose.connect('mydb'); function Transaction(){ var actions = []; this.
var mongoose = require('mongoose');
mongoose.connect('mydb');
function Transaction(){
var actions = [];
this.Add = function(query){
actions.push(query);
};
this.Commit = function(){
for (var i = 0; i < actions.length; i++) {
actions[i]();
}
actions = [];
};
}
exports.Transaction = Transaction
并使用
exports.PostHome = function(req, res){
var id = new ObjectId(req.body.objectId);
transaction.Add(function(){
models.Story.findOne()
.where('_id').equals(id)
.exec(function(err, story){
saveOrUpdateStory(err, story, req, res);
});
});
transaction.Commit();
};
应该提到的是,在SaveOrUpdateStore中有更多的db调用发生
这似乎工作得很好,但有时它会重复命令(提交将被添加两次)。我目前的理论是,这与两个人同时提交两个命令以及在他们之间共享事务列表有关。我不确定这一点,虽然,并希望得到一些帮助。如果对我的代码结构有任何批评,我将不胜感激,因为我仍在学习node中的最佳实践。如果有人遇到同样的问题,我只想澄清问题所在。我有一个Homecontroller.js,我从未创建过它的新实例,所以所有请求都访问它的全局实例。结果是,如果两个请求在足够短的时间内触发同一事务,那么它们可能会触发两次 事后看来,最好将控制器封装在函数中(谷歌“模块模式”),这样就不会发生这种情况
exports.PostHome = function(req, res){
var id = new ObjectId(req.body.objectId);
transaction.Add(function(){
models.Story.findOne()
.where('_id').equals(id)
.exec(function(err, story){
saveOrUpdateStory(err, story, req, res);
});
});
transaction.Commit();
};