我无法在IBM Bluemix中的MongoDb实验中创建新的联系人实体。 该代码之前已经有效。
代码看起来像这样;
**server.js**
var mongoose = require('mongoose');
var config = require('./server/config/config');
var appController = require('./server/controllers');
// https://github.com/Automattic/mongoose/issues/4291
mongoose.Promise = global.Promise;
mongoose.connect(config.db.url);
mongoose.connection.on('connected', function () {
console.info('Mongoose default connection open to ' + config.db.url);
});
mongoose.connection.on('error',function (err) {
console.error('Mongoose default connection error: ' + err);
process.exit(0);
});
mongoose.connection.on('disconnected', function () {
console.error('Mongoose default connection disconnected');
process.exit(0);
});
**contact.js**
var mongoose = require('mongoose');
var ContactSchema = new mongoose.Schema({
name: { type: String, required: false },
company: { type: String, required: false },
email: { type: String, required: false },
phone: { type: String, required: false }
},{ versionKey: false });
exports.Contact = mongoose.model('Contact', ContactSchema);
**controller/api**
var Contact = require('../../models/contact').Contact;
exports.createContact = (req, res ) => {
var contact = new Contact();
contact.name = req.body.name;
contact.company = req.body.company;
contact.email = req.body.email;
contact.phone = req.body.phone;
contact.save( function( err, result ) {
if( err ) {
res.status(422).json( err );
}
else {
res.status(200).json( result );
}
});
};
// THIS WORKS!!
exports.updateContactById = (req, res ) => {
Contact.findByIdAndUpdate(req.params.id,
{'$set' : req.body}, {runValidators:true,new:true})
.select( defaultProjection )
.lean()
.exec( function( err, contact ){ // Execute the query
if( err ) {
res.status(422).json( err );
}
else {
res.status(200).json( contact );
}
});
};
`
我可以在Bluemix的日志中看到,当尝试调用contact.save()方法时,连接会触发断开连接的事件。 “Mongoose默认连接已断开连接”
我正在使用mongoose 4.6.5,节点版本4.6.0。
如果我在保存调用之前添加console.log(contact.save),我会进入日志:
[Function: wrappedPointCut]
我不知道那是什么。但是,我发现了这个:https://github.com/Automattic/mongoose/issues/4064
问题:不执行save()回调。
更新 现在我收到此错误消息:
[0;36mMongoose:[0m contacts.insert
({
_id: ObjectId("5814d8b7d617a6003a49a2fe"),
name: [32m'Henrik'[39m,
company: [32m'Henrik AB'[39m,
email: [32m'henrik@henrik.com'[39m,
phone: [32m'+46123456789'[39m, __v: [33m0[39m
})
现在,我开始相信它可能是索引问题。我在本地遇到过,当我可以运行mongod --repair并重新启动时,一切都在本地运行。
我可以在Bluemix中运行mongod --repair吗?
UPDATE2 我从数据库中完全删除了联系人集合,现在执行了contact.save()回调函数,但是:-),我收到422错误说
name: MongoError message:1 to 159.8.128.163:10107 closed
在日志中看起来像这样;
console.log(contact.save) // [Function: wrappedPointCut]
[0;36mMongoose:[0m contacts.insert
({
_id: ObjectId("58150b01fb566d0038bf70e2"),
name: [32m'henrik'[39m,
company: [32m'henrik'[39m,
email: [32m'henrik'[39m,
phone: [32m'henrik'[39m, __v: [33m0[39m
})
Mongoose default connection disconnected