[Express.js] How to Fix (node:10151) UnhandledPromiseRejectionWarning: TypeError: res.status is not a function
Tadashi Shigeoka · Tue, October 1, 2019
I’ll introduce how to fix the error (node:10151) UnhandledPromiseRejectionWarning: TypeError: res.status is not a function in Express.js.
Prerequisites
Node.js, Express.js Version
- Node.js : version 8.11.3
- Express.js : version 4.17.1
Background - Encountered Error During Code Review
I encountered this error during Express.js + MongoDB code review I’m handling through MENTA service.
Error Details and Solution
TypeError: res.status is not a function Error Details
- res.json is not a function
- (node:10151) UnhandledPromiseRejectionWarning: TypeError: res.status is not a function
res.json is not a function
(node:10151) UnhandledPromiseRejectionWarning: TypeError: res.status is not a function
at router.get (/path/to/yourapp/routes/api/posts.js:13:16)
at
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:10151) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:10151) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Source Code Before Fix
const express = require('express');
const router = express.Router();
const { check, validationResult } = require('express-validator');
const Post = require('../../models/Post');
router.get('/', async (res, req) => {
try {
const posts = await Post.find().sort({ date: -1 });
res.json(posts);
} catch(err) {
console.error(err.message);
return res.status(500).send('Server Error');
}
});
module.exports = router;
Source Code Diff After Fix
The arguments req and res were defined in reverse order, which was causing the res.json is not a function and res.status is not a function errors.
Since req.json and req.status methods are not defined, it makes perfect sense.
diff --git a/routes/api/posts.js b/routes/api/posts.js
index c12c45d..78f94ed 100644
--- a/routes/api/posts.js
+++ b/routes/api/posts.js
@@ -4,7 +4,7 @@ const { check, validationResult } = require('express-validator');
const Post = require('../../models/Post');
-router.get('/', async (res, req) => {
+router.get('/', async (req, res) => {
try {
const posts = await Post.find().sort({ date: -1 });
res.json(posts);
That’s all from the Gemba.