You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 17:25:37