yoyojs
yoyojs

Reputation: 1783

How to check headers in nodejs?

Here is actual code that works well but i would like to check if my headers are well transmitted to my api:

var request = require('request');
var express = require('express');
var router = express.Router();

/* GET data by sportId */
router.get('/:locale/:sportId/:federationId/:date', function(req, res) {
    var date = req.params.date;
    var locale = req.params.locale;
    var sportId = req.params.sportId;
    var federationId = req.params.federationId;

   request(getEventsOptions(sportId, federationId, date, locale), function(error, response, body) {
    res.send(body);
   });
});

// get options for request
function getEventsOptions(sportId, federationId, date, locale)
{
    return {
        url: `http://myapi.com/event/sport/${sportId}/date-from/${date}`,
       headers: {
         'accept': 'application/json',
         'dateTo': date,
         'federationIds': federationId,
         'X-Application-ID': 'sporter',
         'Accept-Language': locale,
     }
   };
}

So my question is quite general, how can i check headers of my call in a node js app ?

Upvotes: 10

Views: 30588

Answers (3)

Pieter Van Eynde
Pieter Van Eynde

Reputation: 51

If you want to check the headers for all incoming api-calls you could also use express middleware.

This example checks an auth-token on all api calls

const router = express.Router();

router.use((req, res, next) => {
    const headers = req.headers
    const clientToken = headers["authorization"] || headers["x-access-token"];
    const serverToken = process.env.TOKEN;
    const verified = clientToken === serverToken;

    if (!verified) {
        return res.status(400).send("Invalid token.");
    }
    next();
});


// followed by your api routes
// router.get("/api/", ...)

Upvotes: 1

MahanTp
MahanTp

Reputation: 744

There are three ways to do this:

First, using req.get function:

req.get('headerName');

Second, using req.header function:

req.header('headerName');

Third, using req.headers actual object:

req.headers['headerName'];

I hope it helps you.

Upvotes: 17

galkin
galkin

Reputation: 5519

According documentation you need req.get function. Also you can use req.headers object with all sended headers.

Code example:

const request = require('request');
const express = require('express');
const router = express.Router();

router.get('/:locale/:sportId/:federationId/:date', (req, res) => {
  // destructuring assignment for better readability
  const { date, locale, sportId, federationId } = req.params;

  // header example with get
  const authHeader = req.get('Authorization');
  console.log(authHeader);
  // example with headers object
  console.log(req.headers);


  request(getEventsOptions(sportId, federationId, date, locale), (error, response, body) => {
    res.send(body);
  });
});

function getEventsOptions(sportId, federationId, date, locale) {
  return {
    url: `http://myapi.com/event/sport/${sportId}/date-from/${date}`,
    headers: {
      'accept': 'application/json',
      'dateTo': date,
      'federationIds': federationId,
      'X-Application-ID': 'sporter',
      'Accept-Language': locale,
    }
  };
}

Upvotes: 4

Related Questions