在尝试部署node.js应用程序时,如何解决“ UnhandledPromiseRejectionWarning”错误?

时间:2020-03-31 20:55:05

标签: javascript node.js mongodb

我目前正在一个项目中,我正在使用一个名为“ jsPsych”的js库进行实验。我正在将node.js与heroku结合使用,以Mongo Atlas作为数据库来在线托管和部署我的应用程序。在编写用于连接到Mongodb的node.js脚本时,我使用了https://www.mongodb.com/blog/post/quick-start-nodejs-mongodb--how-to-get-connected-to-your-database这里提供的教程。现在,一切都可以在本地环境中正常运行,但是当我在线部署实验后,我会收到消息:“实验加载失败。”在检查heroku日志后,我看到了以下内容:“(节点:4)UnhandledPromiseRejectionWarning:未处理的诺言拒绝。此错误是由于在没有catch块的情况下抛出异步函数而产生的,或者是通过拒绝未使用.catch处理的诺言引起的()。”

这是用于连接到mongodb的node.js脚本:

    const {MongoClient} = require('mongodb');
    async function main(){

const uri = "mongodb+srv://username:password@cluster-url/test?retryWrites=true&w=majority";
const client = new MongoClient(uri);

try{
    await client.connect();

    await listDatabases(client);

}  catch (e) {
    console.error(e);
}
finally {
    await client.close();
}
}
main().catch(console.error);


async function listDatabases(client){
    databasesList = await client.db().admin().listDatabases();

    console.log("Databases:");
    databasesList.databases.forEach(db => console.log(` - ${db.name}`));
};

由于我是编码的新手,并且这是我第一次使用后端代码,因此我正在努力寻找解决此问题的方法。另外,似乎脚本中已经包含.catch函数,这是否意味着我不使用.catch函数来处理promise?这可能是引起我问题的原因吗?

2 个答案:

答案 0 :(得分:0)

您在mongoDB上使用免费集群吗? 然后,您可能应该登录到您的帐户,进入网络访问并添加服务器IP地址。

我想您没有为集群打开服务器IP

答案 1 :(得分:0)

对我有用的解决方案是在Mongodb Atlas“网络访问”页面上将IP地址设置为0.0.0.0/0。