express命令报command not found,主因是express-generator全局安装后其bin路径未加入系统path;需运行npm config get prefix获取路径并手动添加至path环境变量,重启终端后即可使用。

npm install express-generator -g 装完就报错
装完 express-generator 后执行 express myapp 报 command not found 或 express is not recognized,基本是全局 bin 目录没进系统 PATH。
- 先运行
npm config get prefix查全局安装路径(比如 Windows 是C:\Users\XXX\AppData\Roaming\npm) - 把这个路径手动加进系统环境变量
PATH,重启终端再试 - Mac/Linux 用户注意:如果用了 nvm,
npm install -g安装的命令可能被 nvm 管理的 Node 版本隔离,建议用nvm use切到当前 Node 版本后再装
WebStorm 里 npm start 启不动,端口 3000 被占了
默认端口冲突太常见——不是 Chrome、Skype 就是另一个 Node 进程在用 3000,别急着改代码,先查清谁占的。
- Windows:命令行运行
netstat -ano | findstr :3000,记下 PID,再用tasklist | findstr "PID"看进程名 - macOS/Linux:
lsof -i :3000或sudo lsof -iTCP -sTCP:LISTEN -P | grep :3000 - 改端口不推荐直接改
bin/www,更稳妥的是在package.json的scripts.start里加环境变量:"start": "PORT=3001 node ./bin/www"
路由加了但访问 404,/api/user 返回 Not Found
Express 4.x 默认不自动加载 routes/ 下的文件,app.use() 那一行漏写或路径写错,就会 404。
- 确认
app.js里有类似var usersRouter = require('./routes/users');+app.use('/api/user', usersRouter); -
users.js里必须导出 router 实例:module.exports = router;,不是module.exports = function(app) { ... } - 注意路径拼接逻辑:浏览器访问
/api/user/list,实际匹配的是router.get('/list', ...),不是router.get('/api/user/list', ...)
req.body 拿不到 POST 数据,一直 undefined
Express 4.16+ 默认不解析请求体,req.body 是空对象,不是你前端没发,是后端根本没开解析器。
- 必须在
app.js里app.use()之前加两行: -
app.use(express.json());—— 解析Content-Type: application/json -
app.use(express.urlencoded({ extended: true }));—— 解析application/x-www-form-urlencoded和multipart/form-data(后者需额外中间件如multer) - 顺序不能错:这两个
use必须放在所有路由定义之前,否则中间件不生效
express.json() 没加、module.exports 写成 exports、或者 app.use 的路径多写了斜杠。这些地方改一行就能通,但找起来容易绕半天。











