Bird
Raised Fist0
Expressframework~5 mins

Virtual path prefixes in Express

Choose your learning style10 modes available
Introduction

Virtual path prefixes let you group routes under a common starting path. This keeps your code organized and easy to manage.

You want to group all user-related routes under '/users' like '/users/login' and '/users/profile'.
You have an admin section and want all admin routes to start with '/admin'.
You want to mount a set of routes from another file or module under a specific path.
You want to serve static files from a specific URL path prefix.
Syntax
Express
app.use('/prefix', routerOrMiddleware);
The '/prefix' is the virtual path prefix where the router or middleware will be mounted.
All routes inside the router will be relative to this prefix.
Examples
This mounts the router at '/api'. So the route is accessible at '/api/hello'.
Express
const express = require('express');
const app = express();
const router = express.Router();

router.get('/hello', (req, res) => {
  res.send('Hello from router!');
});

app.use('/api', router);
This serves static files from the 'public' folder under the '/static' URL path.
Express
app.use('/static', express.static('public'));
Sample Program

This example creates a router with a route '/info'. The router is mounted at '/docs'. So visiting '/docs/info' shows the router response. The home page is at '/'.

Express
const express = require('express');
const app = express();
const router = express.Router();

router.get('/info', (req, res) => {
  res.send('Info page inside router');
});

app.use('/docs', router);

app.get('/', (req, res) => {
  res.send('Home page');
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});
OutputSuccess
Important Notes

Virtual path prefixes do not change the actual route paths inside the router; they just add a prefix when mounted.

You can mount multiple routers with different prefixes to organize your app better.

Summary

Virtual path prefixes help organize routes under a common URL path.

Use app.use('/prefix', router) to mount routers or middleware.

This makes your app easier to maintain and scale.

Practice

(1/5)
1. What is the main purpose of using a virtual path prefix in Express with app.use('/prefix', router)?
easy
A. To handle errors globally in the app
B. To create a new Express app instance
C. To serve static files from a directory
D. To group routes under a common URL path for better organization

Solution

  1. Step 1: Understand what app.use('/prefix', router) does

    This syntax mounts a router or middleware under the URL path '/prefix'.
  2. Step 2: Identify the purpose of grouping routes

    Grouping routes under a common prefix helps organize and maintain the app's URL structure.
  3. Final Answer:

    To group routes under a common URL path for better organization -> Option D
  4. Quick Check:

    Virtual path prefix = route grouping [OK]
Hint: Virtual path prefixes group routes under one URL path [OK]
Common Mistakes:
  • Thinking it creates a new app instance
  • Confusing with static file serving
  • Assuming it handles errors
2. Which of the following is the correct syntax to mount a router on the virtual path prefix '/api' in Express?
easy
A. app.route('/api', router);
B. app.use('/api', router);
C. app.mount('/api', router);
D. app.router('/api', router);

Solution

  1. Step 1: Recall Express method to mount middleware or routers

    Express uses app.use(path, middleware) to mount routers or middleware.
  2. Step 2: Check each option's method name

    Only app.use is the correct method; others like app.route, app.mount, and app.router are invalid or incorrect here.
  3. Final Answer:

    app.use('/api', router); -> Option B
  4. Quick Check:

    Mount router = app.use(path, router) [OK]
Hint: Use app.use to mount routers on paths [OK]
Common Mistakes:
  • Using app.route instead of app.use
  • Trying non-existent methods like app.mount
  • Confusing router mounting with route definitions
3. Given the code below, what URL path will respond with 'Hello from admin'?
const express = require('express');
const app = express();
const adminRouter = express.Router();
adminRouter.get('/', (req, res) => res.send('Hello from admin'));
app.use('/admin', adminRouter);
app.listen(3000);
medium
A. http://localhost:3000/
B. http://localhost:3000/admin
C. http://localhost:3000/admin/
D. http://localhost:3000/admin/home

Solution

  1. Step 1: Understand the router path and mounting prefix

    The router handles GET requests at '/' and is mounted at '/admin'.
  2. Step 2: Combine prefix and router path

    The full path is '/admin' + '/' = '/admin/'.
  3. Step 3: Understand URL normalization

    URLs with or without trailing slash for this route behave the same in Express, so both '/admin' and '/admin/' respond with 'Hello from admin'.
  4. Final Answer:

    http://localhost:3000/admin/ and http://localhost:3000/admin -> Option C
  5. Quick Check:

    Router '/' + mount '/admin' = '/admin/' and '/admin' [OK]
Hint: Combine mount path and router path for full URL; trailing slash optional [OK]
Common Mistakes:
  • Ignoring trailing slash in URL
  • Assuming root '/' responds without prefix
  • Confusing '/admin' and '/admin/home'
4. Identify the error in this Express code snippet that tries to mount a router with a virtual path prefix:
const express = require('express');
const app = express();
const userRouter = express.Router();
userRouter.get('/profile', (req, res) => res.send('User Profile'));
app.use(userRouter, '/user');
app.listen(3000);
medium
A. The order of arguments in app.use is incorrect
B. The router path '/profile' is invalid
C. Missing app.listen call
D. Router should be created with express() not express.Router()

Solution

  1. Step 1: Check the app.use argument order

    Correct syntax is app.use(path, router), but here it is reversed.
  2. Step 2: Identify the correct argument order

    It should be app.use('/user', userRouter) to mount the router at '/user'.
  3. Final Answer:

    The order of arguments in app.use is incorrect -> Option A
  4. Quick Check:

    app.use(path, router) order matters [OK]
Hint: app.use(path, router) not app.use(router, path) [OK]
Common Mistakes:
  • Swapping router and path arguments
  • Thinking router path is invalid
  • Forgetting to call app.listen
5. You want to create an Express app with two routers: adminRouter mounted at '/admin' and userRouter mounted at '/user'. Both routers have a route for '/' that sends different greetings. Which code correctly sets this up so visiting '/admin' and '/user' shows the correct messages?
hard
A. app.use('/admin', adminRouter); app.use('/user', userRouter);
B. app.use(adminRouter, '/admin'); app.use(userRouter, '/user');
C. app.route('/admin', adminRouter); app.route('/user', userRouter);
D. app.get('/admin', adminRouter); app.get('/user', userRouter);

Solution

  1. Step 1: Recall correct syntax for mounting routers with prefixes

    Use app.use(path, router) to mount routers at virtual path prefixes.
  2. Step 2: Evaluate the options

    The correct code uses app.use('/admin', adminRouter); and app.use('/user', userRouter);. Distractors use invalid methods like app.route() or app.get() with routers, or reverse the path and router order in app.use().
  3. Final Answer:

    app.use('/admin', adminRouter); app.use('/user', userRouter); -> Option A
  4. Quick Check:

    Mount routers with app.use(path, router) [OK]
Hint: Mount routers with app.use(path, router) for multiple prefixes [OK]
Common Mistakes:
  • Swapping router and path in app.use
  • Using app.route or app.get to mount routers
  • Not mounting routers at all
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard