Javascript mongoose保存卡滞(从未调用回调)

Javascript mongoose保存卡滞(从未调用回调),javascript,node.js,mongodb,mongoose,save,Javascript,Node.js,Mongodb,Mongoose,Save,我试图将mongoose对象保存到db,但它不起作用(没有保存任何内容,也没有返回回调)。数据库是开放的,并且有一个成功的连接(集合甚至是根据模型创建的,并对其进行索引) 我的模式: var mongoose = require('mongoose'); var Schema = mongoose.Schema; var CourseSchema = new Schema({ providerId: {type: String, required: true, unique: true},

我试图将mongoose对象保存到db,但它不起作用(没有保存任何内容,也没有返回回调)。数据库是开放的,并且有一个成功的连接(集合甚至是根据模型创建的,并对其进行索引)

我的模式:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var CourseSchema = new Schema({
  providerId: {type: String, required: true, unique: true},
  from: {
    provider: {type: String, required: true},
    creators: [String]
  },
  name: {type: String, required: true},
  link: {type: String, required: true},
  textualInfo:{
    summery: String,
    longDescription: String,
    syllabus: String,
    subjects: [String]
  },
  media: {
    image: String,
    trailer: String
  },
  meta:{
    languages: [String],
    level: Number,
    workload: String,
    duration: String,
    prerequirments: String,
    priceDollars: Number,
    enrollments: Number,
  },
  dateCreated: {type: Date, default: Date.now},
  dateLocalModified: {type: Date},
  queries: [String]
});

CourseSchema.index({
  'from.provider': 'text',
  'from.creators': 'text',
  'name': 'text',
  'textualInfo.summery': 'text',
  'textualInfo.longDescription': 'text',
  'textualInfo.syllabus': 'text',
  'textualInfo.subjects': 'text'
},{
  name: 'search index', weights: {
  'from.provider': 120,
  'from.creators': 120,
  'name': 150,
  'textualInfo.summery': 20,
  'textualInfo.longDescription': 2,
  'textualInfo.syllabus': 1,
  'textualInfo.subjects': 20
}});

CourseSchema.pre('save', function(next) {
  var course = this;
  course.dateLocalModified = new Date();

  if(!course.isModified('providerId')) return next();
  if(!(/@/.test(course.providerId))){
    course.providerId = course.providerId + '@' + course.from.provider;
  }
});


var Course = mongoose.model('Course', CourseSchema);
module.exports = Course;
插入测试代码:

    var Course = require('./course');
var mongoose = require('mongoose');

mongoose.connect('mongodb://127.0.0.1:27017/mydb',{
  server: {socketOptions: { keepAlive: 1 }},
  replset: {socketOptions: { keepAlive: 1 }}
});

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
  console.log('mongoose is connected to db');
  var course = new Course({
    providerId: 'pid123',
      from: {
        provider: 'test',
        creators: ['creators']
      },
      name: 'test course',
      link: 'http://testlink.com',
      textualInfo:{
        summery: 'c.shortDescription',
        longDescription: 'c.aboutTheCourse',
        syllabus: 'c.courseSyllabus',
        subjects: ['subjNames'],
      },
      media: {
        image: 'c.photo',
        trailer:  "https://www.youtube.com/watch?v="
      },
      meta:{
        languages: [],
        level: 0,
        workload: 'c.estimatedClassWorkload',
        duration: "",
        prerequirments: 'c.recommendedBackground',
        priceDollars: 0,
        enrollments: 0,
      },
      queries: []
  });
  console.log('trying to save:', course.name);
  course.save(function(err){
    console.log(err);
    db.close();
  });
});
db.on('disconnected', function () {
  console.log('Mongoose default connection disconnected');
});

谢谢你的帮助

这是亡灵术:D,但也许它会帮助某些人。 我认为问题在于“预保存”功能

它只在一个if中返回回调。如果您不进入,则不会调用回调

添加

return next();

在“CourseSchema.pre('save',function(next)”的末尾,应该会为您解决这个问题。

这是亡灵术:D,但可能会帮助某些人。 我认为问题在于“预保存”功能

它只在一个if中返回回调。如果不进入if,则从不调用回调

添加

return next();

在“CourseSchema.pre('save',function(next)”的末尾,应该可以为您解决这个问题。

您解决了吗?我有同样的问题:(@pietro909我停止使用mongodb:)您解决了吗?我有同样的问题:(@pietro909我停止使用mongodb:)