运行Express服务时报MongoClient已重复声明SyntaxError求助
问题解决方法
报错原因
报错信息SyntaxError: Identifier 'MongoClient' has already been declared指向的是变量重复声明问题,你的代码存在两处对MongoClient的声明:
- 第二行通过命名导入已经从mongodb包中引入了
MongoClient:import mongodb, { MongoClient } from 'mongodb'; - 第五行又通过
const关键字重复声明了同名变量:const MongoClient = mongodb.MongoClient;
二者冲突触发了语法错误,导致服务无法启动。
解决方案
两种方案任选其一即可:
方案1:删除重复的声明行
直接删掉第五行的const MongoClient = mongodb.MongoClient;,已完成的命名导入可以直接使用,无需重复取值。
修改后完整代码:
import app from './server'; import mongodb, { MongoClient } from 'mongodb'; import dotenv from 'dotenv'; dotenv.config(); const port = process.env.PORT || 8000; MongoClient.connect(process.env.RESTREVIEWS_DB_URI, { maxPoolSize: 50, wtimeoutMS: 2500, useNewUrlParser: true, }) .catch((err) => { console.error(err.stack); process.exit(1); }) .then(async (client) => { app.listen(port, () => { console.log(`listening on port ${port}`); }); });
方案2:去掉命名导入的MongoClient
如果不需要单独做命名导入,把第二行的{ MongoClient }移除即可,保留从默认导出对象中取值的逻辑。
修改后第二行代码:
import mongodb from 'mongodb';
其余代码无需改动。
修改完成后重新启动服务即可正常运行。
内容的提问来源于stack exchange,提问作者blessing Jackson
相关产品推荐
相关产品推荐

