Home > OS >  Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client [node and expres
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client [node and expres

Time:11-03

I am trying to get data by Id records saved in mssql database. for eg. I am forming a get request in postman like this: localhost:3200/api/v1/players Problem is I am getting error displayed as follows:

node:_http_outgoing:576
    throw new ERR_HTTP_HEADERS_SENT('set');
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

Why is it so? Is it because some other query is also running when I am visiting that endpoint?

My code for querying by data:

const getPlayerById=async(req, res, next)=>
{
    try
    {
        const id = req.params.id;

        sql.connect(config, function(err)
        {
            if(err)
            {
                console.log(err);
            }
            else
            {
                var req=new sql.Request();

                 var player=req.input('input_parameter', sql.BigInt, id)
                            .query("select distinct * from players WHERE Id=@input_parameter", function(err, recordset)
                            {
                                if(err)
                                {
                                    console.log("Error while querying for Id!: " err)
                                }
                                else
                                {
                                    res.send(recordset);
                                }

                            });
            }
            return res.send("Record fetched for selected player!");
            
        });
    }
    catch(error)
    {
        res.status(400).send(error.message);
    }
}

In my main server.js I have wired up

app.use('/api/v1', playerRoutes.routes);

In router file:

router.get('/players/:id', playerControll.getPlayerById)

The record being displayed in my postman response window is like:

Could not send request Error: connect ECONNREFUSED 127.0.0.1:3200

EDIT********** Now the query is working, but I am getting the fetched record being displayed twice in a nested format!!

Like this->

{
    "recordsets": [
        [
            {
                "Id": 6,
                "player_code": "P006",
                "player_name": "Petr Cech",
                "player_club": "Chelsea",
                "player_position": "Goalkeeper"
            }
        ]
    ],
    "recordset": [
        {
            "Id": 6,
            "player_code": "P006",
            "player_name": "Petr Cech",
            "player_club": "Chelsea",
            "player_position": "Goalkeeper"
        }
    ],
    "output": {},
    "rowsAffected": []
}

What's the glitch now?? Why is it showing like this?

CodePudding user response:

You are getting this error, simply because the res.send(recordset); line is executed before the return res.send("Record fetched for selected player!");

Maybe you should add a return keyword to have return res.send(recordset);

CodePudding user response:

When you connect successfully to the database, and the query returns results without error, you are sending the results back with:

res.send(recordset)

But also, regardless if the connection with the database is established or not, you are sending back a message:

return res.send("Record fetched for selected player!");

res.send() can only be called only once per request.

  • Related