Node.js新手项目报错:Identifier 'express' has already been declared 问题解决求助
解决Node.js中"Identifier 'express' has already been declared"语法错误
这个错误的核心原因很明确:你在同一个作用域里重复使用const声明了express变量——const不允许对同一个标识符进行多次声明,哪怕是重复执行相同的require语句也会触发这个语法错误。
第一步:定位重复声明的位置
先检查你的代码文件:
- 看看是否不小心复制了多行
const express = require('express'),比如粘贴代码时重复了这一行; - 检查是否有被注释掉但没完全删除的代码片段里,还保留着
const express的声明; - 如果你的代码里引入了其他本地模块,确认那些模块里没有意外声明全局的
express变量(不过这种情况概率很低,因为模块作用域是隔离的)。
顺便修正代码里的其他潜在问题
除了这个语法错误,你的代码里还有几个会导致后续运行失败的小bug,一起帮你修正了:
- 变量名拼写错误:你声明了
dadosRouter,但使用路由时写成了dataRouter,这会触发dataRouter is not defined错误; - 未定义的
port变量:第一个app.listen里用了port但没声明,建议从环境变量获取或者直接指定3000; - 模板字符串语法错误:
$(3000)应该是${3000},否则会输出字面量而非变量值; - 重复调用
app.listen:启动服务器只需要一次调用即可,重复调用没有意义。
修正后的完整代码
const express = require('express'); const app = express(); require('dotenv').config() const mongoose = require('mongoose') const dadosRouter = require('./routes/data') // 连接MongoDB数据库 mongoose.connect(process.env.MONGO, { useNewUrlParser: true }) const db = mongoose.connection db.on('error', (error) => console.error(error)) db.once('open', () => console.log('Connected to database')) // 配置中间件 app.use(express.json()) app.set("view engine", "ejs"); app.use(express.urlencoded({ extended: false})) // 挂载路由(修正变量名拼写) app.use('/data', dadosRouter) // 根路径响应 app.get('/', (req, res) => { res.send("Opening") }) // 启动服务器(使用环境变量端口或默认3000) const port = process.env.PORT || 3000; app.listen(port, ()=> { console.log(`Server running on localhost:${port}`) });
内容的提问来源于stack exchange,提问作者Edwars
相关产品推荐
相关产品推荐

