node.jsexpressexpress-router

Nodejs - TypeError: res.statusCode is not a function


There are obviously duplicate questions but the answers didn't help me. Either there is something fundamental that I just don't understand yet as a beginner in nodeJS and Express or something weird is happening.

I have two Express routes, the first one works perfectly fine. But as soon as I started working on the second one I immediately encountered the problem when trying to use 'res' to send back a HTTP status code.

server.js (with everything unrelated redacted):

const express = require('express')
const session = require('express-session')
const MySQLStore = require('express-mysql-session')(session)
const db = require('./database')

const route1 = require('./routes/route1')
const route2 = require('./routes/route2')

const sessionStore = new MySQLStore({}, db)

const app = express()

app.use(express.json())

app.use(session({
    // session settings
}))

// Routes
app.use('/api/route1', route1)
app.use('/api/route2', route2)

app.listen(process.env.PORT || 8000)

route1.js (with everything unrelated redacted):

const express = require('express')
const db = require('../database')

const router = express.Router()

// Middleware
function validateData(req, res, next) {...}

async function validateUser(req, res, next) {...}

// POST data to db
router.post('/', validateData, validateUser, async (req, res) => {
    try {
        const results = await db.query(
            // Query the database
        )
    } catch(err) {
        // Handle error
    }

    res.status(200).end()

})

module.exports = router

route2.js - where the error happens (with everything unrelated redacted):

const express = require('express')
const db = require('../database')

const router = express.Router()

router.get('/', (req, res) => {
    res.statusCode(200).end() // TypeError: res.statusCode is not a function
})

module.exports = router

Solution

  • It says it correctly.

    res.statusCode is not a function, it is Node.js native variable: https://nodejs.org/api/http.html#responsestatuscode

    Express have function res.status(statusCode), i.e. res.status(200);: https://expressjs.com/en/api.html#res.status