Home > Mobile >  When I register a user and then redirect to the books page I receive 500 status code
When I register a user and then redirect to the books page I receive 500 status code

Time:06-16

I have created small book library application as assignment for university in NodeJs. I created a basic authentication for users, the problem is when I register a user and then redirect to the books page I recive 500 status code "Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client". The code works and it redirects to the login page but I always receive this bug.

//route file
var express = require('express');
var router = express.Router();
var jwtHelper = require('../helpers/jwt-helper');

var authController = require("../controllers/auth-controller");

router.get("/login", authController.login);
router.post('/login', authController.accessUser);

router.get("/register", authController.register)
router.post("/register", authController.addUser);

router.get('/logout', authController.logout);

module.exports = router;


//controller file
exports.register = (req, res) => {
    let formData = {};
    res.render('register', {
        title: 'books',
        errMsg: {
            valid: false
        },
        formData
    });
}

exports.addUser = async (req, res) => {
    const formData = validateRegisterForm(req.body);
    if (formData.valid) {
        const check = await authService.checkIfExists(formData.email.value);
        if (check) {
            res.render('register', {
                title: 'books',
                formData,
                errMsg: {
                    valid: true,
                    msg: 'User already exists'
                }
            });
        } else {
            let input = {
                name: formData.name.value,
                email: formData.email.value,
                password: await authService.cryptPassword(formData.psw.value)
            };
            await authService.addUser(input);
            let user = await authService.getByEmail(input.email);
            const token = jwtHelper.generateAccessToken(user);
            delete(user.password);
            res.cookie('authorization', 'Bearer ' token).redirect('/api/books');
        }
    }
    res.render('register', {
        title: 'books',
        formData: formData,
        errMsg: {
            valid: false
        }
    });
}


//form validation
function validateRegisterForm(body){
    let name = body.name.replace(/(["'])/g, "\\$1");
    let email = body.email.replace(/(["'])/g, "\\$1");
    let psw = body.psw;

    const emailTest = /^(([^<>()[\]\\.,;:\s@"] (\.[^<>()[\]\\.,;:\s@"] )*)|(". "))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9] \.) [a-zA-Z]{2,}))$/;
    const numbersPsw = /[0-9]/g;
    const upperCaseLetters = /[A-Z]/g;
    const lowerCaseLetters = /[a-z]/g;

    let formData = {
        valid: true,
        name: {
            value: name
        },
        email: {
            value: email
        },
        psw: {
            value: psw
        }
    };

    if(!name || name.length<2){
        formData.name = {
            value: name,
            valid: false,
            err: 'Name not valid'
        };

        formData.valid = false;
    }

    if(!email || emailTest.test(String(email).toLowerCase()) == false){
        formData.email = {
            value: email,
            valid: false,
            err: 'Email not valid'
        };

        formData.valid = false
    }

    if(!psw || psw.length < 6 || !psw.match(upperCaseLetters) || !psw.match(lowerCaseLetters) || !psw.match(numbersPsw)){
        formData.psw = {
            value: psw,
            valid: false,
            err: 'Password invalid'
        };

        formData.valid =  false;
    }

    return formData;
} 

CodePudding user response:

add return keyword in every response statment like

return res.render('register', {
        title: 'books',
        formData: formData,
        errMsg: {
            valid: false
        }
});

CodePudding user response:

//the return statement should fix it

return res.render('register', { title: 'books', formData errMsg: { valid: false } });

  • Related