app.use(morgan("dev")) 不工作,我的中间件在 app.js 中编写时工作,而在 server.js 中编写时不起作用

问题描述

这是我的 App.js 文件

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

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


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 文件

const dotenv = require("dotenv");
const mongoose = require("mongoose");
const morgan = require("morgan");
const app = require("./app");

dotenv.config({ path: "./config.env" });

const DB = process.env.DATABASE.replace(
  "<password>",process.env.DATABASE_PASSWORD
);

mongoose
  .connect(DB,{
    useNewUrlParser: true,useCreateIndex: true,useFindAndModify: false,useUnifiedTopology: true,})
  .then(() => {
    console.log("Connection to Database succesful ?");
  });

const portNumber = 8080;
app.use(morgan("dev"));
app.listen(portNumber,"127.0.0.1",() => {
  // eslint-disable-next-line no-console
  console.log(`Server is now running on port  ${portNumber} ⚡`);
});

问题
当我在 app.js 文件中编写 app.use(morgan("dev")) 时它可以工作,但是当我在 server.js 文件中编写它时(我粘贴代码的方式)以上)它不起作用,甚至没有给出任何错误。

解决方法

当您将其放入 server.js 文件时,它是最后一个路由/中间件声明。这意味着它永远不会被调用,除非没有其他路由接受请求。

您希望为所有路由调用的中间件必须在您希望它之前运行的任何路由定义之前定义。登记这些事项的顺序。

在我看来,像这样的中间件属于您的 app.js 文件,因此您可以在创建 app 对象之后和任何其他路由之前先注册这个中间件。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...