harsh
harsh

Reputation: 247

NodeJS express routing with router

I have generated node project with express generator

Main app.js file

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var detailRouter = require('./routes/user-detail');
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/users/:userId', detailRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

user details router file

var express = require('express');
var router = express.Router();

router.get('/', (req, res, next) =>{
  res.send("Name is:"+req.params.userId);
})
module.exports = router;

when I am running running the application with npm start I am getting the req.params.userdId == undefned

Is something wrong with code or I am missing something.

Also when i use below code in app.js it works perfectly fine

app.get('/users/:userid', (req,res,next) => {
  res.send(req.params);
})

Thanks in advance.

Upvotes: 1

Views: 259

Answers (3)

Gurucharan M K
Gurucharan M K

Reputation: 905

Adding to the Sangram's answer, you can also use route method along with instance of Router for much cleaner readable code like below.

import { Router } from 'express';
import {
  readOne,
  updateOne,
  deleteOne
} from './controller';

const router = new Router();
router
  .route('/:id')
  .get(readOne)
  .put(updateOne)
  .delete(deleteOne);

export default router;

Upvotes: 0

Kristian Sakarisson
Kristian Sakarisson

Reputation: 31

If you want to access the values of parameters passed by GET through the url, do

const { id } = req.query

In this case you could access the parameter value passed in the URL:

http://yoursite.com/users?id=somevalue

Upvotes: 0

Sangram Badi
Sangram Badi

Reputation: 4254

Yes you have done mistake. Params means you need to pass some paramenter in the url. like below

app.use('/:userId', indexRouter);

And need to change

router.get('/:userId', (req, res, next) =>{
      res.send("Name is:"+req.params.userId);
})

Upvotes: 1

Related Questions