启用type:module后导入JS文件出现ERR_UNKNOWN_FILE_EXTENSION错误
解决Node.js ES模块导入的ERR_UNKNOWN_FILE_EXTENSION错误
核心问题分析
错误明确指出:在"type":"module"的项目环境中,Node.js不支持加载无扩展名的本地文件。你的导入语句import router from "./routes/login"省略了.js扩展名,同时被导入的login.js仍在使用CommonJS语法(require/module.exports),这两点共同触发了报错。
分步解决
1. 修复导入语句的文件扩展名
在app.js中,将导入login路由的代码修改为显式指定.js扩展名:
import router from "./routes/login.js"
注意:ES模块规范要求本地文件导入必须明确写出扩展名,不能像CommonJS那样省略。
2. 统一模块语法(可选但推荐)
将login.js从CommonJS语法切换为ES模块语法,保持项目语法一致性:
修改后的login.js代码:
import express from "express" const router = express.Router() router.post("/login", async (req, res) => { console.log("Meets") let userName = req.body.userName let userPassword = req.body.password // 注意:当前文件未定义db变量,需从app.js导入或通过依赖注入传递,否则会报db未定义错误 const checkQuery = 'SELECT * FROM user WHERE user_id=? AND user_password=?' const queryResult = db.query(checkQuery, [userName, userPassword], (err, result) => { if (err) { console.log("There was some error: ", err) } else { console.log("Successful") res.json(result) } }) }) export default router
3. 额外问题排查
- 确认
routes/login.js文件路径拼写正确,确保文件确实存在于主目录下的routes文件夹中; - 若使用nodemon启动,可将
package.json中的nodemon脚本改为nodemon app.js,避免路径歧义。
测试验证
修改完成后,重新启动服务器:
npm run nodemon
此时导入错误应已解决,若出现db is not defined报错,需在login.js中导入app.js里的db连接对象,或调整数据库连接的管理方式。
内容的提问来源于stack exchange,提问作者Meet Bhadeshia
相关产品推荐
相关产品推荐

