Muhammed Bera Koç
Muhammed Bera Koç

Reputation: 426

How to pass values from a middleware to a route in Express.js?

const router = require('express').Router()
const loggerMiddleware = (req, res, next) => {
  console.log(`${req.method} ${req.path}`)
  req.locals.isLogged = true
  next()
}

router.get('/color', loggerMiddleware, (req, res) => {
  console.log(req.locals.isLogged)
  res.send('#ff0000');
})

When I run the code above, Node compiler gives me a warning of TypeError: Cannot set property 'isLogged' of undefined. Where do I go wrong?

Upvotes: 2

Views: 743

Answers (2)

Flux
Flux

Reputation: 419

I am not familiar with how to pass data from a middleware to a route, but this looks like a plain javascript issue. It looks like req.locals is undefined. Start by checking if req.locals is undefined. If it is undefined, intialize it through req.locals = {}. Then set req.locals.isLogged = true.

Upvotes: -1

kaxi1993
kaxi1993

Reputation: 4710

You need to put locals to res not req

const router = require('express').Router()
const loggerMiddleware = (req, res, next) => {
  console.log(`${req.method} ${req.path}`)
  res.locals.isLogged = true
  next()
}

router.get('/color', loggerMiddleware, (req, res) => {
  console.log(res.locals.isLogged)
  res.send('#ff0000');
})

Upvotes: 3

Related Questions