save()不适用于mongoose.Schema

时间:2018-01-05 17:17:54

标签: javascript node.js mongodb mongoose save

{{1}}

为什么save()回调函数永远不会运行?我的意思是,"测试"文字没有显示,而"示例"就像它应该创建(我的意思是,当我打印它,它看起来没问题)。 有任何想法吗? TIA

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

正如Nir Levy已经说过:当时的电话可以是保存文件的另一种方式。 您还可以尝试在save的回调中提供第二个参数:

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服务器?如果这可能导致问题?

答案 2 :(得分:0)

这通常在您未连接到数据库时发生。您可以创建模型对象,但是在数据库上运行的Mongoose函数都不起作用。他们默默地失败了。确保连接connect功能。您还可以侦听连接和错误事件,以确定您实际上已连接:

$scope.getCarsTableColumnDefinition = function() {
    return [
        {
            columnHeaderDisplayName: 'Model',
            displayProperty: 'name',
            sortKey: 'name',
            columnSearchProperty: 'name',
            visible: $scope.visibleProperty
        },
        ...];
};

启动应用程序并注意 Mongoose已连接时,请注意终端。最后,您可以打开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'); });

例如,您可以在连接呼叫的正下方添加它。

顺便说一下,你不必使用promise方法。您可以使用已经使用的回调版本。只需确保使用console.log中缺少的'更正错误。