【问题标题】:save() doesn't work on mongoose.Schemasave() 不适用于 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

【问题讨论】:

    标签: javascript node.js mongodb mongoose save


    【解决方案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 中缺少 ' 的错误即可。

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 2020-05-09
        • 2016-07-12
        • 2018-04-27
        • 1970-01-01
        相关资源
        最近更新 更多