examples/view-locals/index.js JAVASCRIPT 156 lines View on github.com → Search inside
1'use strict'23/**4 * Module dependencies.5 */67var express = require('../..');8var path = require('node:path');9var User = require('./user');10var app = express();1112app.set('views', path.join(__dirname, 'views'));13app.set('view engine', 'ejs');1415// filter ferrets only1617function ferrets(user) {18  return user.species === 'ferret'19}2021// naive nesting approach,22// delegating errors to next(err)23// in order to expose the "count"24// and "users" locals2526app.get('/', function(req, res, next){27  User.count(function(err, count){28    if (err) return next(err);29    User.all(function(err, users){30      if (err) return next(err);31      res.render('index', {32        title: 'Users',33        count: count,34        users: users.filter(ferrets)35      });36    })37  })38});3940414243// this approach is cleaner,44// less nesting and we have45// the variables available46// on the request object4748function count(req, res, next) {49  User.count(function(err, count){50    if (err) return next(err);51    req.count = count;52    next();53  })54}5556function users(req, res, next) {57  User.all(function(err, users){58    if (err) return next(err);59    req.users = users;60    next();61  })62}6364app.get('/middleware', count, users, function (req, res) {65  res.render('index', {66    title: 'Users',67    count: req.count,68    users: req.users.filter(ferrets)69  });70});7172737475// this approach is much like the last76// however we're explicitly exposing77// the locals within each middleware78//79// note that this may not always work80// well, for example here we filter81// the users in the middleware, which82// may not be ideal for our application.83// so in that sense the previous example84// is more flexible with `req.users`.8586function count2(req, res, next) {87  User.count(function(err, count){88    if (err) return next(err);89    res.locals.count = count;90    next();91  })92}9394function users2(req, res, next) {95  User.all(function(err, users){96    if (err) return next(err);97    res.locals.users = users.filter(ferrets);98    next();99  })100}101102app.get('/middleware-locals', count2, users2, function (req, res) {103  // you can see now how we have much less104  // to pass to res.render(). If we have105  // several routes related to users this106  // can be a great productivity booster107  res.render('index', { title: 'Users' });108});109110// keep in mind that middleware may be placed anywhere111// and in various combinations, so if you have locals112// that you wish to make available to all subsequent113// middleware/routes you can do something like this:114115/*116117app.use(function(req, res, next){118  res.locals.user = req.user;119  res.locals.sess = req.session;120  next();121});122123*/124125// or suppose you have some /admin126// "global" local variables:127128/*129130app.use('/api', function(req, res, next){131  res.locals.user = req.user;132  res.locals.sess = req.session;133  next();134});135136*/137138// the following is effectively the same,139// but uses a route instead:140141/*142143app.all('/api/*', function(req, res, next){144  res.locals.user = req.user;145  res.locals.sess = req.session;146  next();147});148149*/150151/* istanbul ignore next */152if (!module.parent) {153  app.listen(3000);154  console.log('Express started on port 3000');155}

Code quality findings 6

Use let or const to avoid scope issues and hoisting
info correctness var-declaration
var express = require('../..');
Use let or const to avoid scope issues and hoisting
info correctness var-declaration
var path = require('node:path');
Use let or const to avoid scope issues and hoisting
info correctness var-declaration
var User = require('./user');
Use let or const to avoid scope issues and hoisting
info correctness var-declaration
var app = express();
Use strict equality (===) to prevent type coercion bugs
info correctness loose-equality
return user.species === 'ferret'
Remove debugging statements or use a logging library
info correctness console-log
console.log('Express started on port 3000');

Get this view in your editor

Same data, no extra tab — call code_get_file + code_get_findings over MCP from Claude/Cursor/Copilot.