无法在MongoDb中创建新实体 - 更新

时间:2016-10-29 01:50:58

标签: mongodb mongoose ibm-cloud

我无法在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

0 个答案:

没有答案