aditya kumar
aditya kumar

Reputation: 3023

how can i parse a error message that i am getting in nodejs app

I am making an app with reactjs frontend and nodejs backend api for that at someplace i getting error something like this.

parse-error-message

But here i want to get only this message email: {message: "This email is already taken", I tried to parse this error using some online turorial but when i try them i get error from backend.

This is the error after using errorparser

(node:14208) UnhandledPromiseRejectionWarning: ReferenceError: errors is not defined
    at exports.default (C:/projects/bookworm-practice/bookworm-api/src/utils/parseErrors.js:5:15)
    at C:/projects/bookworm-practice/bookworm-api/src/routes/users.js:14:54
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:14208) 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:14208) [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.

this is my parseError function

import _ from 'lodash';

export default function () {
    const result = {};
    _.forEach(errors, (val, key) => {
        result[key] = val.message;
    });
    return result;
}

this is my user function where i am using parseError

import express from 'express';
import User from '../models/User';
import parseErrors from '../utils/parseErrors';

const router = express.Router();

router.post('/', (req, res) => {
    const { email, password } = req.body.user;
    const user = new User({ email });
    user.setPassword(password);
    user.save()
        .then(user => res.json({ user: user.toAuthJSON() }))
        //.catch(err => res.json({ err })); // this is the default one
        .catch(err => res.status(400).json({ errors: parseErrors(err.errors) 
        //this is after adding parseErrors funtion 
    }))
})

export default router;

Upvotes: 0

Views: 146

Answers (1)

NV4RE
NV4RE

Reputation: 193

Your parseErrors function did not includes errors as argument

import _ from 'lodash';

export default function (errors) {
    const result = {};
    _.forEach(errors, (val, key) => {
    result[key] = val.message;
    });
    return result;
}

Upvotes: 1

Related Questions