app.use(morgan("dev")) 不工作,我的中间件在我写在 app.js 中时工作,而在我写在 server.js 中时它不工作
app.use(morgan("dev")) Not working, my middleware works when I write it in app.js and it does not work when I write it in 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[=32= 中写入时] 文件(我在上面粘贴代码的方式)它不起作用,甚至没有给出任何错误。
当您将它放入 server.js
文件时,它是最后一个 route/middleware 声明。这意味着它永远不会被调用,除非没有其他路由接受请求。
您想要为所有路由调用的中间件必须在您希望它在 运行 之前定义的任何路由定义之前定义。注册这些事项的顺序。
在我看来,像这样的中间件属于您的 app.js
文件,因此您可以先注册此中间件,在创建 app
对象之后和任何其他路由之前。
这是我的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[=32= 中写入时] 文件(我在上面粘贴代码的方式)它不起作用,甚至没有给出任何错误。
当您将它放入 server.js
文件时,它是最后一个 route/middleware 声明。这意味着它永远不会被调用,除非没有其他路由接受请求。
您想要为所有路由调用的中间件必须在您希望它在 运行 之前定义的任何路由定义之前定义。注册这些事项的顺序。
在我看来,像这样的中间件属于您的 app.js
文件,因此您可以先注册此中间件,在创建 app
对象之后和任何其他路由之前。