Use Express.js middleware to forward data to the Log visit endpoint.

In Express.js, middleware functions are functions that have access to the request object, response object, and the next middleware function in the application’s request-response cycle. Read the official documentation for more details.

Setup

  1. Set up the HALL_API_KEY environment variable with your Hall API key.
  2. Add the analytics middleware to your Express.js application before your route handlers.

Example

The example below demonstrates how to forward data from Express.js request objects.

middleware.js
const express = require('express')
const app = express()

function analyticsMiddleware(req, res, next) {
  const requestPath = req.originalUrl || req.url
  const requestMethod = req.method
  const requestIp = 
    req.headers['x-forwarded-for']?.split(',')[0] ||
    req.headers['x-real-ip'] ||
    req.ip ||
    req.connection?.remoteAddress ||
    '127.0.0.1'

  const requestHeaders = {
    'User-Agent': req.headers['user-agent'],
    'Host': req.headers['host'],
    'Referer': req.headers['referer'],
  }

  fetch('https://analytics.usehall.com/visit', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${process.env.HALL_API_KEY}`,
    },
    body: JSON.stringify({
      request_path: requestPath,
      request_method: requestMethod,
      request_ip: requestIp,
      request_headers: requestHeaders,
      request_timestamp: Date.now()
    }),
  })

  next()
}

app.use(analyticsMiddleware)