0

Whenever i try to call signIn function i get error as:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:371:5)
    at ServerResponse.setHeader (node:_http_outgoing:576:11)
    at ServerResponse.header (/Users/nitesh/Desktop/finisterre/node_modules/express/lib/response.js:767:10)
    at ServerResponse.send (/Users/nitesh/Desktop/finisterre/node_modules/express/lib/response.js:170:12)
    at ServerResponse.json (/Users/nitesh/Desktop/finisterre/node_modules/express/lib/response.js:267:15)
    at /Users/nitesh/Desktop/finisterre/src/controllers/admin/auth-controller.js:66:44
    at /Users/nitesh/Desktop/finisterre/node_modules/mongoose/lib/model.js:4960:18
    at processTicksAndRejections (node:internal/process/task_queues:78:11)
Emitted 'error' event on Function instance at:
    at /Users/nitesh/Desktop/finisterre/node_modules/mongoose/lib/model.js:4962:15
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
[nodemon] app crashed - waiting for file changes before starting...

The code that i am trying to execute is for admin signup and signin process. Same function works flawlessly for user route. But for admin it is returning error as cannot set headers and i am getting error as user is not defined in postman, but user is created.

Signup works perfectly but not signin. But same signup and sigin request works without a single warning for user role.Is there any fix for this??

const express = require('express');
const UserModel = require('../../models/user-model');
const jwt = require('jsonwebtoken');

 
const signUp = function(req, res, next) {
    UserModel.findOne({email: req.body.email})
        .exec(function(err, user) {
            if(user) return res.status(400).json({
                message: "Admin already exists"
            })
        })
    const {
        email,
        password,
        firstName,
        lastName,
    } = req.body;

    const user = new UserModel({
        username: Math.random().toString(),
        email,
        password,
        firstName,
        lastName,
        role: 'admin'
    });
    user.save(function(err, data) {
        if(err){
            return res.status(400).json({
                message: "Something went wrong",
                err
            });
        }

        if(data){
            return res.status(200).json({
                message: "Admin created successfully"
            });
        }
    })

    
}


const signIn = function(req, res, next) {
    UserModel.findOne({email: req.body.email})
        .exec(function(err, user) {
            if(err){ 
                return res.status(400).json({err})
            };
            if(user){
                if(user.authenticate(req.body.password) && user.role === 'admin'){
                    const token = jwt.sign({_id: user._id}, process.env.JWT_SECRET,{
                        expiresIn: process.env.JWT_SECRET_EXPIRATION
                    });
                    const {
                        _id,
                        firstName,
                        lastName,
                        email,
                        role,
                        fullName
                    } = user;
                    return res.status(200).json({
                        token,
                        user: {
                            _id,
                            firstName,
                            lastName,
                            email,
                            role,
                            fullName
                        },
                        message: "Admin signed in successfully"
                    });
                }
                else{
                    return res.status(400).json({
                         message: 'Invalid password'
                    })
                }
            }
            else{
                return res.status(400).json({
                    message: "Something went wrong"
                });
            }
        })

        console.log(user);
}


const profile = function(req, res, next) {
    console.log(req.user);
}


//this is middleware, it needs to placed in middlewares directory
const requireSignIn = function(req, res, next) {
    const token = req.headers.authorization.split(" ")[1];
    const user = jwt.verify(token, process.env.JWT_SECRET);
    req.user = user;
    next();
}


module.exports = {
    signIn,
    signUp,
    requireSignIn,
    profile
}
  • 1
    Does this answer your question? [ERR\_HTTP\_HEADERS\_SENT: Cannot set headers after they are sent to the client](https://stackoverflow.com/questions/52122272/err-http-headers-sent-cannot-set-headers-after-they-are-sent-to-the-client) – Mohammad Hossein Dolatabadi Jan 02 '22 at 07:17
  • Can you post the working code for the user role? – garson Jan 02 '22 at 07:17
  • I figured it out. The request response cycle was completed earlier and console.log(user) was giving me error. – Neetesh Khanal Jan 02 '22 at 07:47

0 Answers0