使用mongoose复制DB提交
Duplicate DB submissions with mongoose
我是node.js的新手,我遇到了一些重复命令的间歇性问题。我认为这可能与我试图将我的db交互与我的代码的其余部分分开并且我没有正确地隔离它的事实有关。我有一个名为transaction.js的文件,如下所示。
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
我用
开始一个新的交易var transactionlib = require('../DB/transaction');
var transaction = new transactionlib.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();
};
应该提到的是,在saveOrUpdateStory中有更多的db调用正在发生。
这似乎工作得很好,但现在它似乎重复的命令(提交将被添加两次)。我目前的理论是,这与两个人同时提交两个命令以及事务列表在他们之间共享有关。我不确定这一点,希望得到一些帮助。如果对我的代码结构有任何批评,我也很感激,因为我还在学习node.
如果有人遇到同样的问题,我只是想澄清什么是错的。我有一个Homecontroller.js,我从来没有创建一个新的实例,所以所有的请求都访问它的全局实例。结果是,如果两个请求在足够短的时间内触发同一个事务两次。
事后看来,把你的控制器包装在函数中是个好主意(谷歌"模块模式"),这样就不会发生这种情况。
相关文章:
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- Javascript生成的表单未提交
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- HTML表单提交时未执行外部函数
- 在POST中将html表作为csv提交
- 我应该使用Ng提交还是点击表格
- 我想使用模态通过php文件发送邮件,并且我希望在提交关闭后关闭pop
- 提交后保留下拉选择的值
- 键入最后一位数字后自动提交
- 阻止表单元素提交
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- Jquery提交表单而不刷新
- 将图像上传ajax与表单提交ajax相结合
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 自定义表单验证和提交
- 获取在附加脚本中查询 sqlite db 的结果,以提交到内容脚本
- 一个onclick事件打开框和框上提交它链接到PHP函数设置一些值到db
- 使用mongoose复制DB提交
- 将提交的表单数据写入DB后调用javascript函数
- 如何得到一个书签弹出一个表单,提交URL和标题的DB加上评论