save() 不适用于 mongoose.Schema
Posted
技术标签:
【中文标题】save() 不适用于 mongoose.Schema【英文标题】:save() doesn't work on mongoose.Schema 【发布时间】:2018-01-05 17:17:54 【问题描述】:const Data = require('./Models/Data');
...
let example = new Data( sample );
example.save( function ( err )
console.log('test);
if ( err )
console.log('Error saving Data. 'Error: ', err);
);
知道为什么 save() 回调函数永远不会运行吗?我的意思是,“测试”文本没有显示,而“示例”的创建就像它应该的那样(我的意思是,当我打印它时,它看起来没问题)。 有任何想法吗? TIA
【问题讨论】:
【参考方案1】:Mongoose async save() 函数与函数一起使用,这意味着您不需要向它传递回调函数,而是使用 then/catch 模式:
const Data = require('./Models/Data');
...
let example = new Data( sample );
example.save()
.then(() =>
console.log('test);
)
.catch((err) =>
console.log('Error saving Data. 'Error: ', err);
);
查看更多here
【讨论】:
保存成功了吗? then 部分只有在没有抛出错误的情况下才会运行 没有错误,没有“测试”,没有数据保存在集合中:/【参考方案2】:正如 Nir Levy 已经说过的:then 调用可以是另一种保存文档的方法。 您还可以尝试在保存的回调中提供第二个参数:
example.save((err, doc) =>
console.log('test');
if (err)
console.log('Error while saving data: ', err);
else
console.log('document is: ', doc);
);
另请注意,您错过了 example.save 回调中 console.log() 上的右引号
您能否确保您的 mongodb 服务器正在运行并且您已连接到 mongodb 服务器?如果这可能导致问题?
【讨论】:
【参考方案3】:这通常发生在您尚未连接到数据库时。您可以创建模型对象,但在数据库上运行的 Mongoose 函数都不起作用。相反,他们默默地失败了。确保使用连接功能进行连接。您还可以侦听连接和错误事件以查看您是否实际连接:
const dburl = `mongodb://localhost/testdb`;
mongoose.connect(dburl, useMongoClient: true );
mongoose.connection.on('connected', () => console.log(`Mongoose connected to $dburl`); );
mongoose.connection.on('error', (err) => console.log(`Mongoose connection error: $err`); );
mongoose.connection.on('disconnected', () => console.log('Mongoose disconnected'); );
启动应用时注意终端,寻找Mongoose connected。最后,您可以在 Mongoose 中打开调试模式以查看幕后实际发生的情况:
mongoose.set('debug', true);
例如,您可以在 connect 调用下方添加它。
顺便说一句,你不必使用 promise 方法。您可以使用您已经在使用的回调版本。只需确保更正 console.log 中缺少 ' 的错误即可。
【讨论】:
以上是关于save() 不适用于 mongoose.Schema的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot 4 控制器错误:CrudRepository<Fournisseur,Long> 类型中的方法 save(S) 不适用于参数 (Fournisseur)