使用Node.js无法连接MongoDB Cloud上部署的MongoDB集群
问题解决:Node.js连接MongoDB Atlas时出现
SyntaxError: Unexpected token '.' 核心问题分析
你的报错有两个根源:
- Node.js版本兼容问题:你使用的Node.js 12.22.9不支持ES2020的可选链操作符(
?.),但当前安装的mongodb驱动内部使用了该语法,导致编译失败。 - 代码逻辑错误:代码里的
collection.log是不存在的方法,且collection.find({}).toArray()是异步操作,未添加await处理。
解决方案
1. 修复版本兼容问题(二选一)
选项A:升级Node.js版本
Node.js 12已停止官方维护,建议升级到14.x或更高LTS版本(如18.x),升级后可直接支持可选链语法,使用最新版mongodb驱动。
选项B:安装兼容Node.js 12的驱动版本
若暂时无法升级Node.js,执行以下命令替换驱动版本:
npm uninstall mongodb npm install mongodb@4.17.0
4.x系列的mongodb驱动适配Node.js 12,不会使用可选链语法。
2. 修正代码错误
修正后的完整代码如下:
const { MongoClient } = require('mongodb'); // 替换< password >为你的真实密码 const uri = 'mongodb+srv://sandeepc:<password>@my-default-cluster.nopctvg.mongodb.net/?retryWrites=true&w=majority'; const database = 'sample_mflix'; const client = new MongoClient(uri, { useUnifiedTopology: true }); async function getdata() { try { // 建立连接 await client.connect(); console.log('成功连接到MongoDB Atlas'); const db = client.db(database); const collection = db.collection('movies'); // 查询数据(添加limit避免返回过多结果) const response = await collection.find({}).limit(10).toArray(); console.log('查询结果:', response); } catch (err) { console.error('连接或查询出错:', err); } finally { // 确保连接关闭 await client.close(); } } getdata();
说明:
- 添加
try/catch捕获异常,便于排查问题 - 修正
collection.log为console.log,并给异步的toArray()添加await - 增加
finally块保证连接正常关闭 - 给
find添加limit(10)避免一次性返回大量数据(可根据需求调整)
验证步骤
- 按照上述方案解决版本兼容问题
- 替换代码中的
<password>为你的真实密码 - 运行代码,若看到
成功连接到MongoDB Atlas及查询结果,说明问题解决
内容的提问来源于stack exchange,提问作者Sandeep Chatterjee
相关产品推荐
相关产品推荐

