diff --git a/lib/response.js b/lib/response.js index f965e539dd2..c9198b24905 100644 --- a/lib/response.js +++ b/lib/response.js @@ -64,7 +64,9 @@ module.exports = res res.status = function status(code) { // Check if the status code is not an integer if (!Number.isInteger(code)) { - throw new TypeError(`Invalid status code: ${JSON.stringify(code)}. Status code must be an integer.`); + // Use String() instead of JSON.stringify() to handle BigInt and other types safely + var stringifiedCode = typeof code === 'bigint' ? code.toString() : JSON.stringify(code) + throw new TypeError(`Invalid status code: ${stringifiedCode}. Status code must be an integer.`); } // Check if the status code is outside of Node's valid range if (code < 100 || code > 999) { diff --git a/test/res.status.js b/test/res.status.js index 59c8a57e702..4a83b748094 100644 --- a/test/res.status.js +++ b/test/res.status.js @@ -200,6 +200,18 @@ describe('res', function () { .get('/') .expect(500, /Invalid status code/, done); }); + + it('should raise error for BigInt status code with readable message', function (done) { + var app = express(); + + app.use(function (req, res) { + res.status(200n).end(); + }); + + request(app) + .get('/') + .expect(500, /Invalid status code: 200\. Status code must be an integer/, done); + }); }); }); });