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

Express项目中app.use(morgan('dev'))写在server.js不生效问题咨询

问题原因

Express 中间件严格按照注册顺序执行,当某个中间件或路由处理完请求并返回响应后,后续注册的中间件将不会被触发。
你当前的代码注册顺序存在问题:

  • 首先在 app.js 中已经依次注册了 express.json 解析中间件、接口路由、静态资源服务中间件,所有用户请求都会被这几部分提前处理完成并返回响应
  • 之后你才在 server.js 中注册 morgan 中间件,此时没有请求会流转到morgan中执行,因此不会打印日志,也不会抛出报错。
解决方法

推荐采用最符合Express项目规范的方案:将morgan中间件的注册逻辑移到app.js中,且放在所有处理业务请求的中间件、路由之前即可。

修改后的app.js代码示例:

const express = require("express");
const dotenv = require("dotenv");
const morgan = require("morgan"); // 引入morgan
const movieRouter = require("./routes/movieRoutes");
const userRouter = require("./routes/userRoutes");

const app = express();
dotenv.config({ path: "./config.env" });

// 优先注册morgan日志中间件
app.use(morgan("dev"));
app.use(express.json());
//Mounting routes
app.use("/kramank-api/v1/movies", movieRouter);
app.use("/kramank-api/v1/users", userRouter);
app.use(express.static("./"));
module.exports = app;

同时删除server.js中app.use(morgan("dev"))的冗余代码即可。

如果你确实需要将morgan注册逻辑放在server.js中,只需要调整注册顺序:将app.js中路由、静态资源的注册逻辑移到server.js的morgan注册之后即可,不过这种方案会拆分路由注册逻辑,不利于项目维护,不推荐使用。

内容的提问来源于stack exchange,提问作者Abhishek C. Gidde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 06:24:02