MongoDB - Mongoose -只能调用一次控制器的save方法.然后它就再也不存钱了
MongoDB - Mongoose - Can only call the controllers save method once. Then it never saves again
请参见下面的编辑
我正在做的是通过post请求调用控制器保存函数。当我第一次运行该方法时,它似乎保存了我制作的2个对象。然后它会把我引到正确的路线上。但是当我回去张贴相同的post请求。它给我console.log的,但从来没有真正保存它们。
路由器:
app.post('/new', function(req, res, next){
poll.newPoll(req, res, next);
next();
}, function(req, res){
res.redirect('/ok');
})
模式:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//Schema for the polls
var pollSchema = new Schema({
title: String,
hash: String
});
var Poll = mongoose.model('Poll', pollSchema);
module.exports = Poll;
和控制器:
var Poll = require('../modules/poll.js');
var hash = require('randomstring');
var randomHash = hash.generate({
length: 5
});
//Function for creating new polls
module.exports.newPoll = function(req, res, next){
var createdPoll = new Poll({title: "Wazap", hash: randomHash});
var secondPoll = new Poll({title: "Ok", hash: randomHash});
createdPoll.save(function (err, createdPoll) {
if (err) {
console.log(err);
return handleError(err);
}
console.log("New Poll saved");
});
secondPoll.save(function (err, secondPoll) {
if (err) {
console.log(err);
return handleError(err);
}
console.log("New Poll saved");
});
}
猫鼬初始化:
var mongoose = require('mongoose');
//controllers
var poll = require('./controllers/poll.js');
//Mongostuff
mongoose.Promise = global.Promise;
mongoose.connect('localhost:27017/pollr');
mongod日志:
2016-08-11T14:51:38.142+0200 I COMMAND [conn3] command pollr.polls command: insert { insert: "polls", documents: [ { title: "Wazap", hash: "pxeZP", _id: ObjectId('57ac74d997df31a423f20049'), __v: 0 } ], ordered: false, writeConcern: { w: 1 } } ninserted:1 keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 2, w: 2 } }, Database: { acquireCount: { w: 1, W: 1 } }, Collection: { acquireCount: { W: 1 } } } protocol:op_query 197ms
2016-08-11T14:51:38.143+0200 I COMMAND [conn4] command pollr.polls command: insert { insert: "polls", documents: [ { title: "Ok", hash: "pxeZP", _id: ObjectId('57ac74d997df31a423f2004a'), __v: 0 } ], ordered: false, writeConcern: { w: 1 } } ninserted:1 keyUpdates:0 writeConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { w: 1 }, acquireWaitCount: { w: 1 }, timeAcquiringMicros: { w: 143945 } }, Collection: { acquireCount: { w: 1 } } } p
只有当我删除数据库中的所有数据时,它才能再次保存。我希望这是足够的信息给。我在谷歌上搜索了2个多小时来寻找解决方案,但它没有给我一个。这可能是我做了什么蠢事,或者我忽略了什么。
谢谢!
编辑:
显然它正在保存,但没有在日志中记录它。要是我知道就好了,哈哈。我能做点什么吗?
尝试使用以下方法同时创建多个文档。它使用一个数组来保存文档,然后将该数组传递给create方法,该方法有一个回调函数,可用于调用错误或对结果保存的文档做一些事情。
//Function for creating new polls
module.exports.newPoll = function(req, res, next){
var docs = [{title: "Wazap", hash: randomHash}, {title: "Ok", hash: randomHash}];
Poll.create(docs, function (err, wazap, ok) {
if (err) {
console.log(err);
return handleError(err);
}
console.log("Saved Wazap :" + wazap + " Saved Ok: " + ok)
});
}
我已经将保存的文档添加到console.log中,这样您就可以检查它们的_id,以确保它们是唯一的。
相关文章:
- jQuery Deferred and promise-错误:对象没有't支持属性或方法'然后'
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 一键点击首先调用javascript,执行验证,然后调用控制器方法
- 有没有一种方法可以制作一个prezi,然后以某种方式将其转换为html和css类型的代码
- 方法来查看jQuery文件是否已完全加载,然后执行与其相关的函数
- Jquery$(window).scrollTop();方法是滚动到页面的特定位置,然后在页面顶部再次滚动
- 执行 ajax 同步 POST 然后提交表单的正确方法
- 将某些内容写入控制台的另一种方法,然后控制台.log
- 想要通过GET方法从URL获取值,然后想在我的标题区域的右上角显示这些值
- 在循环中使用 q promise 的最佳方法是什么?等待链完成,然后再迭代到下一个
- 等待方法的响应,然后再继续而不使用 SJAX
- 调用原型的重写方法,然后调用下一个原型的重写方法错误
- 有没有更简单的方法可以为不同的选择器链接不同的 jQuery 操作,然后嵌套 $.when
- 在操作方法中保存图像,然后将 URL 返回给客户端
- 将已解决的承诺值传递到最终“然后”链的最佳方法是什么?
- 有没有跨平台的方法可以将一个字符串编码为另一个没有空格的字符串,然后将其解码回来
- Javascript:如何使用apply方法传递参数数组,然后在被调用的函数中访问它
- 是否有加载XML文件的方法,转义任意'&'s,然后对其进行解析
- 将选择器存储在变量Javascript中,然后对其使用方法
- 解析.然后方法和链接|语法让我迷惑