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

Node.js中require报错:无法找到模块'.../models/user'

解决Node.js require路径错误:Cannot find module '../models/user'

这个问题我太熟了!本质是文件移动后相对路径的基准目录变了,咱们一步步拆解问题、解决问题:

先搞清楚路径为什么错了

先还原下你的项目结构变化:

  • 拆分前的结构(正常运行时):

    项目根目录/
    ├── models/
    │   └── user.js
    └── router/
        └── users.js
    

    当时users.js里的require('../models/user')是从router/目录往上跳一级到项目根,再进入models找到user.js,完全没问题。

  • 拆分后的结构(报错时):

    项目根目录/
    ├── models/
    │   └── user.js
    └── router/
        └── users/
            ├── login.js
            └── register.js
    

    现在你的login.js在router/users/目录下,再用../models/user的话,Node会从router/users/往上跳一级到router/,然后找models/user——可router/下面根本没有models文件夹,自然就报找不到模块的错了!

三种解决方案,按需选择

方案1:修正相对路径(最简单,适合小型项目)

既然现在文件多嵌套了一层,那相对路径就要多往上跳一级:
把login.js、register.js里的路径改成:

const User = require('../../models/user');

解释:../../会从router/users/先跳到router/,再跳到项目根目录,之后就能正确找到models/user.js了。

方案2:用绝对路径(最稳妥,避免后续改结构再踩坑)

相对路径很容易因为文件移动出问题,用绝对路径一劳永逸:

方式A:借助__dirname和path模块

先引入Node内置的path模块,再用path.join拼接绝对路径:

const path = require('path');
const User = require(path.join(__dirname, '../../models/user'));

你可以先打印__dirname看看当前文件的绝对路径,方便排查:

console.log(__dirname); // 输出示例:/你的电脑路径/项目根目录/router/users

方式B:配置NODE_PATH环境变量

如果是大型项目,不想写长长的路径,可以把项目根目录设为Node的模块查找路径:

  • Mac/Linux终端运行:
    export NODE_PATH=./
    
  • Windows命令行运行:
    set NODE_PATH=./
    

之后所有文件里都可以直接写:

const User = require('models/user');

Node会自动从项目根目录开始查找模块。

方案3:用模块别名(适合复杂项目)

如果你的项目用了Webpack或者Babel,可以配置模块别名,比如把@models映射到./models目录,这样不管文件在哪,都可以写require('@models/user')。不过纯Node项目的话,前两种方案更直接。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:39:24