1

Its my first foray into building a REST api with node/express and I have different routes based on resource type (e.g. users, auth, feed). im using express-validator in all the routes, and some of the users routes need to be protected with some extra auth middleware. But the additional middleware seems to be executing 10 times instead of once...what am I not understanding here?

app.js:

const express = require("express");

const authRoutes = require("./routes/auth");
const feedRoutes = require("./routes/feed");
const userRoutes = require("./routes/user");

var app = express();

app.use(authRoutes);
app.use(feedRoutes);
app.use(userRoutes); //userRoutes contains protected routes

app.use((error, req, res, next) => { //express built in error handler
    //console.log("errorhandler: " + error);
    const status = error.statusCode || 500;
    const message = error.message;
    const data = error.data;
    res.status(status).json({ message: message, data: data });
});

const PORT = process.env.PORT || 8080;
...remaining code

routes/user.js:

//user resource related routes
const express = require("express");

//controllers and middlewares
const userController = require("../controllers/user");
const validateInputs = require("../middleware/validateInputs");
const validateAuthTokens = require("../middleware/validateAuthTokens");

//routes that use the controllers
const router = express.Router();

//protect these routes with the validateAuthToken middleware
router.get("/users/:userID/favorites",  validateInputs.getFavoritesValidationRules(), validateAuthTokens, userController.getFavorites);

router.post("/users/:userID/favorites", validateInputs.addFavoriteValidationRules(), validateAuthTokens, userController.addFavorite);

//delete and add have same params and validation rules
router.delete("/users/:userID/favorites", validateInputs.addFavoriteValidationRules(), validateAuthTokens, userController.deleteFavorite);

module.exports = router;

middleware/validateAuthToken.js:

module.exports = (req, res, next) => {

    console.log("inside validateAuthTokenMiddleware");
    //remaining auth code
    next();

}

CURRENT OUTPUT:

server now listening!
inside validateAuthTokenMiddleware  1
inside validateAuthTokenMiddleware  2
inside validateAuthTokenMiddleware  3
inside validateAuthTokenMiddleware  4
inside validateAuthTokenMiddleware  5
inside validateAuthTokenMiddleware  6
inside validateAuthTokenMiddleware  7
inside validateAuthTokenMiddleware  8
inside validateAuthTokenMiddleware  9
inside validateAuthTokenMiddleware  10

Why is the auth validation middleware executing so many times???

MT Dev
  • 51
  • 1
  • 2
  • Are you saying that your server receives one incoming request and you get that log entry 10 times? Which incoming request is it? It is coming from a browser or from Javascript? – jfriend00 Feb 01 '21 at 01:41
  • yes was one request sent through postman that triggered the 10 log entries. I was testing the add favorites endpoint to begin with. In debug mode i see that even after a response is sent to the client (e.g. postman) it loops back to the middleware function again – MT Dev Feb 01 '21 at 06:24

0 Answers0