[Fixed] Set response header along with a string

Issue

I am trying to send the token in the headers of an HTTP request from backend to the frontend along with sending my own defined string. However, I am getting an issue. The token is being printed as null on the client-side. I don’t know why:

Here’s my code:

Node/Express

if (bcrypt.compareSync(passcode, results[0].password))
{
     const token = jwt.sign({id: email}, secret, {expiresIn: 86400 });
     console.log(token);
     if(results[0].userrights == 'full')
       {
          res.setHeader('x-access-token', token);
          res.send("Full Authorization");
       }

    //rest of the code
 }

Angular

this.http.post('http://localhost:3000/api/login', form.value, {responseType: "text", observe: 
                'response'})
  .subscribe(responseData => {
    console.log(responseData);
    console.log(responseData.headers.get('x-access-token'));  //prints null on the console

I have searched quite a bit and found different examples which is making it very confusing. I don’t want to use response status rather my own defined string. I have tried different things to print the variable but it still is throwing as null.

Solution

If you are using a browser extension to allow CORS requests then Access-Control-Expose-Headers should be added to the headers on server side. Please try adding the following line: res.setHeader('Access-Control-Expose-Headers', '*')

Angular2 's Http.post is not returning headers in the response of a POST method invocation

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

Leave a Reply

(*) Required, Your email will not be published