我在哪里可以获得节点警告的文件名和行号?

时间:2018-03-23 01:35:47

标签: javascript node.js express

我在这里得到了这些神秘的线条:

  

DEBUG:连接Mongoose(节点:5983)   UnhandledPromiseRejectionWarning:未处理的承诺拒绝   (拒绝id:1):TypeError:无法读取属性'然后'未定义的   (节点:5983)[DEP0018]弃用警告:未处理的承诺拒绝   不推荐使用。在未来,承诺拒绝未处理   将使用非零退出代码终止Node.js进程。

如何获取有用的调试信息,以便我不必猜出确切的问题在哪里?

我相信它就在这个文件的某个地方:

const mongoose = require('mongoose');
const helper = require('../config/helper');
const schema = require('./Schemas')

mongoose.connect(helper.getMongoose()).then(
  () => { 
    console.log('DEBUG: Mongoose connected')
    mongooseConnected();
  },
  (err) => { 
    console.log('DEBUG: Mongoose did not connect')
  }
);

function mongooseConnected () {
    makeSchema( schema.User, 
            { id_google: '1',
              type: 'person',
              timestamp: Date.now()
            });
}

function makeSchema (Schema, dataObj) {
  const Class = mongoose.model('Class', Schema);
  const Instance = new Class(dataObj);
  Instance.save((err, results)=>{
    if (err) { 
      return console.error(err);
    }
  }).then(() => { 
    console.log('Saved Successfully')
  });
}

2 个答案:

答案 0 :(得分:0)

在您的情况下,您正在为保存功能提供回调,这样mongoose就不会返回Promise:

SELECT * FROM userTable WHERE UPPER(column) LIKE UPPER('%this_is_a_hard_coded_string%')

如果您仍想使用Promise,则不必传递回调函数:

gcloud init

答案 1 :(得分:0)

通常,未处理的Promise拒绝意味着您缺少一个处理错误的catch方法。在返回承诺后简单地包括.then()只会在成功运行时处理代码,而包括.catch块将跳过.then并仅运行.catch,错误为执行返回promise的代码时发生错误时的回调。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

myModel.save()
    .then(() => {
    console.log('Saved');
    })
    .catch(err => {
    console.log(err);
}