Search code examples
javascriptjsonexpresspug

getting RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined in express app


I am getting the above error when running the following code in my express app. When I go to localhost:3000/cards.

This is in my cards.js file.

const express = require('express');
const router = express.Router();
const { data } = require('../data/flashcardData.json');
const { cards } = data;

router.get('/', (req, res) => {
    res.render('card', {
        prompt: cards[0].question,
        hint: cards[0].hint
    });
});

module.exports = router;

This is the code in my app.js file.

const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');

const app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

app.set('view engine', 'pug');

const mainRoutes = require('./routes');
const cardRoutes = require('./routes/cards');

app.use(mainRoutes);
app.use('/cards', cardRoutes);

app.use((req, res, next) => {
    const err = new Error('Not Found');
    err.status = 404;
    next(err);
});

app.use((err, req, res, next) => {
    res.locals.error = err;
    res.status(err.status);
    res.render('error');
});

app.listen(3000, () => {
    console.log('The application is running on localhost:3000!');
});

Any help would be appreciated. Basically, I am trying to incorporate a json file into the express app and it is coming up with this error.


Solution

  • Set a default status in your error handler middleware if error does not contain the property status. In this case we default to error code 500:

    const express = require('express');
    const bodyParser = require('body-parser');
    const cookieParser = require('cookie-parser');
    
    const app = express();
    
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    
    app.set('view engine', 'pug');
    
    const mainRoutes = require('./routes');
    const cardRoutes = require('./routes/cards');
    
    app.use(mainRoutes);
    app.use('/cards', cardRoutes);
    
    app.use((req, res, next) => {
      const err = new Error('Not Found');
      err.status = 404;
      next(err);
    });
    
    app.use((err, req, res, next) => {
      res.locals.error = err;
      //------------------------vvvvvvv added
      const status = err.status || 500;
      res.status(status);
      res.render('error');
    });
    
    app.listen(3000, () => {
      console.log('The application is running on localhost:3000!');
    });