javascriptnode.jsexpressmiddlewaremorgan

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


Here is my App.js file

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;

Here is my Server.js file

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} âš¡`);
});

The problem
When I write app.use(morgan("dev")) in the app.js file it works, but when I write it in the server.js file (the way I have pasted my code above) it does not work and doesn't even give any errors.


Solution

  • When you put it in your server.js file, it's the very last route/middleware declaration. That means it never gets called except when no other route has taken the request.

    Middleware that you want to get called for all routes must be defined BEFORE any of the route definitions that you want it to run before. The order of registering these matters.

    In my opinion, middleware like this belongs in your app.js file so you can register this middleware first, right after you create the app object and before any other routes.