我目前正在一个项目中,我正在使用一个名为“ 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?这可能是引起我问题的原因吗?
答案 0 :(得分:0)
您在mongoDB上使用免费集群吗? 然后,您可能应该登录到您的帐户,进入网络访问并添加服务器IP地址。
我想您没有为集群打开服务器IP
答案 1 :(得分:0)
对我有用的解决方案是在Mongodb Atlas“网络访问”页面上将IP地址设置为0.0.0.0/0。