Ler o subdomínio usando Javascript ou Nodejs

Este é um artigo muito rápido onde vou falar sobre uma necessidade que tive ao desenvolver um web app, basicamente a app apresentava um comportamento diferente para cada subdomínio, logo precisava identificar os subdomínios do domínio pela qual a aplicação era servida.

No client-side

var subdominio = window.location.hostname.split(‘.’)[0];

Acima, acedi ao objecto global ```window.location```, o mesmo retorna informações sobre a localização do documento ou página que foi carregada, como a porta, hostname ou domínio, e o caminho ou rota. Ex:

A partir daqui podíamos usar expressões regulares para obter a primeira palavra antes do ponto a contar da esquerda para direita, mas as string em Javascript têm um chamado split(), o mesmo separa a string usando um separador e retorna um array contendo cada uma das pequenas strings obtidas. Sendo que um domínio é constituído por nomes e uma extensão, e os mesmos são separados por pontos (.), então iremos definir da seguinte forma:

var getArray = getHostname.split(‘.’)

Desse jeito temos um array, e como o subdomínio é o item mais à esquerda logo fica com primeiro elemento do array com index 0.

var getSubDominio = getArray[0];

Uma vez obtendo o valor na variável, podemos avançar com as condições pretendidas ou simplement fazer o print nalgum lado da aplicação. Ex:

if (getSubDominio === ‘store’) {
console.log(Você está no subdomínio ${getSubdominio});
}

No server-side

No lado do servidor o processo é tão simples quanto no cliente. Usando ExpressJS podemos obter o subdomínio atravéz do objecto request.headers, o mesmo retorna um conjunto de propriedades, incluindo a propriedade host, tal como no lado do cliente.

Exemplo em uma aplicação Express:

const express = require(‘express’);
const app = express();
// Rotas
app.get(‘/’, (request, response) => {
// Obter o subdomínio
let getSubdominio = request.headers.host.split(‘.’);
   // Enviar a resposta
response.send(`Você está no subdomínio ${getSubdominio}`);
});

Referências

- Window.location no MDN
- String.prototype.split() no MDN

Like what you read? Give Firmino Changani a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.