使用async/await连接MongoDB遇语法错误及mongod启动失败求助
修复MongoDB连接的async/await语法错误
你的代码错误在于async修饰位置错误,且混用了回调函数与async/await语法。MongoClient.connect支持Promise,正确的async/await用法如下:
const { MongoClient } = require("mongodb"); const uri = "mongodb+srv://shanegibney:<password>@cluster0.asnad.mongodb.net/?retryWrites=true&w=majority"; const databaseName = "blah"; // 定义async函数包裹异步操作 async function connectDB() { let client; try { // await直接获取连接客户端 client = await MongoClient.connect(uri, { useNewUrlParser: true }); console.log("Connection established - All well"); const db = client.db(databaseName); // await查询操作 const results = await db.collection("student").find().toArray(); console.log(results); } catch (error) { console.log("Connection failed for some reason:", error); } finally { // 确保客户端连接关闭 if (client) { await client.close(); } } } // 调用async函数 connectDB();
修改说明:
- 将异步逻辑封装到async函数中,async关键字只能修饰函数
- 使用
try/catch捕获连接或查询过程中的错误,替代原回调的error判断 - 直接
await MongoClient.connect()获取客户端实例,无需回调 - 添加
finally块确保数据库连接被关闭,避免资源泄漏
解决mongod启动失败问题
从日志可以看到核心错误:
NonExistentPath: Data directory /data/db not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file.
解决方法1:创建默认数据目录
MongoDB默认会尝试使用/data/db作为数据存储目录,该目录默认不存在,执行以下命令创建并设置权限:
# 创建目录(需要sudo权限) sudo mkdir -p /data/db # 将目录权限赋予当前用户,避免后续启动权限问题 sudo chown -R $USER /data/db
之后直接运行mongod即可启动服务。
解决方法2:指定自定义数据目录
如果不想使用默认目录,可以手动指定一个自定义目录(比如当前项目下的mongo-data):
# 创建自定义目录 mkdir -p ./mongo-data # 启动mongod并指定数据目录 mongod --dbpath ./mongo-data
内容的提问来源于stack exchange,提问作者ofey
相关产品推荐
相关产品推荐

