猫鼬保存卡住(从未调用过回调)
Posted
技术标签:
【中文标题】猫鼬保存卡住(从未调用过回调)【英文标题】:mongoose save stuck (callback never called) 【发布时间】:2016-01-07 22:15:28 【问题描述】:我正在尝试将 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');
);
感谢您的帮助!
【问题讨论】:
你解决了吗?我有同样的问题:( @pietro909 我停止使用 mongodb :) 【参考方案1】:这是死灵术 :D 但也许它会帮助某人。 我认为问题在于“预保存”功能,
它只在一个 if 中返回回调。如果你不进入 if 回调永远不会被调用。
添加一个
return next();
在“CourseSchema.pre('save', function(next)”的末尾应该会为您解决问题。
【讨论】:
以上是关于猫鼬保存卡住(从未调用过回调)的主要内容,如果未能解决你的问题,请参考以下文章
CoreAudio AudioQueue 回调函数从未调用过,没有报错
PhoneGap 插件:从未调用过 AudioEncode 成功回调
网站的 OSX 推送通知 - 从未调用过 Safari requestPermission 回调