Why am I getting [object object ] instead of JSON?
The value [Object object]
has nothing to do with the data you sent. This has to do with the way you print the value.
[Object object]
means you have received an object. The value of type usually returned when you either concatinate the object
with string
.
Example:
var obj = {a: 1};console.log('Printing ' + obj); // Prints [object object]
So, instead of concatinating the object
, you can stringify
the object and print it.
Example
var obj = {a: 1};console.log('Printing ' + JSON.stringify(obj)); // Prints {"a":1}
Or
var obj = {a: 1};console.log('Printing ', obj); // Prints formatted {"a":1}
res.status(200).json({ user: user, token: token });
This is how you are sending on success. You are formatting response as JSON.But on failure, you are returning plain JS Object. Formatting failure responses as JSON object will solve your problem.
You can do this without using next. Try this code, It will work straight away!
router.route('/login').post(function (req, res, next) { console.log('i should be here when path match to login', req.body); UserModel.findOne({ username: req.body.username, }) .exec(function (err, user) { if (err) { console.log(err); res.status(500).json({message:'Backend error'}) } if (user) { var passwordMatch = passwordHash.verify(req.body.password, user.password); if (passwordMatch) { var token = generateToken(user); res.status(200).json({ user: user, token: token, message:'Login successful' }); } else { res.status(400).json({message:'Wrong password'}) } } else { res.status(400).json({message:'User does not exist'}) } }); });