导入自定义模块jwtVerify报错求助(路径确认无误)
解决思路:模块导入失败问题
问题重现
报错信息:
Cannot find module '/usr/src/app/mware/jwtVerify' imported from /usr/src/app/routes/projects/projectsRouter.js
导入代码:
import jwtVerify from "../../mware/jwtVerify"
待导入模块代码:
import jwt from "jsonwebtoken"; import fs from "fs"; function jwtVerify(req, res, next){ const jwtkey = fs.readFileSync(process.env.JWT_PUBLIC_KEY); if (!req.headers["auth"]) { return res.status(401).send("No token provided"); } const token = req.headers["auth"]; jwt.verify(token, jwtkey, { algorithms: ["RS256"] }, (err, decoded) => { if (err) { console.log(err); return res.status(418).send("Failed to authenticate token"); } req.decoded = decoded; next(); }); }; module.exports = jwtVerify;
核心问题与解决步骤
导出与导入的模块系统不匹配
你用ES模块的import语法导入,但模块用的是CommonJS的module.exports导出,两者不兼容。把模块里的module.exports = jwtVerify改成ES模块的默认导出:export default jwtVerify;明确文件扩展名
Node.js在ES模块模式下要求导入时明确文件扩展名,试试把导入语句改成:import jwtVerify from "../../mware/jwtVerify.js"检查项目的模块模式配置
查看项目根目录的package.json:- 如果有
"type": "module",说明项目是ES模块模式,所有.js文件都会被当作ES模块,这时候必须用export/import语法,不能用module.exports/require; - 如果没有
"type": "module",默认是CommonJS模式,用import的话需要把文件改成.mjs扩展名,或者在package.json里添加"type": "module"切换成ES模块模式。
- 如果有
验证文件路径与大小写
Linux系统文件名区分大小写,确认mware目录下的文件确实是jwtVerify.js,而不是JwtVerify.js或者其他大小写变体;同时检查文件是否真的存在于指定路径,有没有拼写错误。
内容的提问来源于stack exchange,提问作者GeorgeTheFool
相关产品推荐
相关产品推荐

