Hoje em dia um programador tem a vida facilitada na medida em que tem à sua disposição, e de forma gratuita, código/funções já criadas que pode utilizar nas suas aplicações.
Hoje vamos aprender a desenvolver uma pequena aplicação que irá mostrar dados relativos à nossa localização tendo como base o endereço IP público associado à nossa ligação à Internet.
Neste tutorial vamos precisar de duas coisas essenciais:
- Node.js instalado— interpretador de código javascript open-source que funciona do lado do servidor.
- Pubic IP Address API — consultar site www.ip-api.com
1) Instalação do Node.js
Caso ainda não tenha o Node.js instalado na sua máquina, basta executar os seguintes comandos:
sudo apt-get update
sudo apt-get install nodejs
Irá ser necessário também instalar o gestor de pacotes do Node.js (npm — Node Package Manager), pelo que deve proceder à sua instalação executando o seguinte comando:
sudo apt-get install npm
2) Preparação do ambiente
Vamos então começar a criar a nossa pequena aplicação usando Node.js recorer à API fornecida pelo site mencionado acima.
O primeiro passo é criar um diretório, por exemplo, com o nome ‘nodejs-ipgeo’, ou outro nome à sua escolha.
cd /home/user/Desktop
mkdir nodejs-ipgeo
De seguida, iniciamos o nosso projeto com o comando npm init, que irá criar um ficheiro package.json onde podemos configurar alguns parâmetros, nomeadamente a descrição do projeto, o autor, palavras-chave, etc.
cd nodejs-ipgeo
npm init
O próximo passo é criar um ficheiro dentro do diretório criado anteriormente, com o nome ‘index.js’.
touch index.js
Invocar a Pubic IP Address API
De forma a invocar a API que iremos utilizar, necessitamos de um módulo chamado npm request para fazer requisições HTTP. Para instalar este módulo, basta executar o seguinte comando:
npm install request --save
3) Programação
Vamos agora editar o ficheiro ‘index.js’. Para tal, basta executar o comando:
nano -w index.js
Aceda a ip-api.com e copie o URL da API: http://ip-api.com/json. Adicione o seguinte código ao ficheiro:
let request = require('request');
let url = `http://ip-api.com/json`
let dados = '';
request(url, function (err, response, body) {
if(err){
console.log('error:', err);
} else {
let ipInfo = JSON.parse(body);
dados = `?????????? WHERE AM I ?????????
-------------------------------
IP: ${ipInfo.query}
Country: ${ipInfo.country}
City: ${ipInfo.city}
Region: ${ipInfo.regionName}
Lat: ${ipInfo.lat}
Lon: ${ipInfo.lon}
Organization: ${ipInfo.org}
-------------------------------
Dev by CP 2019`
console.log(dados);
}
});
Clique em ‘Save’ para guardar.
Breve explicação do código:
A utilização do módulo npm request é bastante simples, bastando para isso passar por parâmetro um URL que devolve o resultado da API:
request(url, function (err, response, body){...});
- url: Invocação da API, não necessitamos de passar o endereço IP, uma vez que o endereço http://ip-api.com/json devolve toda a informação acerca do IP público da nossa máquina.
- dados: variável que vai receber os dados devolvidos pela API, já com uma formatação cuidada.
De maneira a formatar o output do nosso programa, vamos utilizar uma função do Node.js que é o JSON.parse().
É comum usar o JSON.parse() quando se pretende que os dados JSON se convertam num objeto Javascript.
A nossa API devolve uma string do tipo:
{"as":"AS3243 MEO - SERVICOS DE COMUNICACOES E MULTIMEDIA S.A.","city":"Viseu","country":"Portugal","countryCode":"PT","isp":"PT Comunicacoes S.A.","lat":48.661,"lon":-25.9097,"org":"PT Comunicacoes S.A.","query":"2.81.15.89","region":"18","regionName":"Viseu","status":"success","timezone":"Europe/Lisbon","zip":"3500-146"}
Podemos usar a função JSON.parse() para converter texto num objeto Javascript.
let ipInfo = JSON.parse(body);
Para aceder a cada parâmetro da API, basta fazer referência ao objeto que contém o parse da string, ipInfo, e invocar o nome do parâmetro (as, city, country, countryCode, isp, lat …) que podemos observar na string devolvida pela API.
Country: ${ipInfo.country}
No final, para mostrar os dados na consola, basta acrescentar a linha:
console.log(dados);
4) Executar a aplicação
Por fim, para executar a aplicação, basta escrever o comando:
node index.js
Pronto! É isto, bem simples e rápido, não é? Mas, e se quisermos ver esta informação num servidor web?
5) Executar a aplicação num servidor HTTP
Com o Node.js é muito fácil criar um servidor http. Considerando que pretendemos criar uma página que devolva os dados da aplicação anterior, vamos acrescentar mais umas linhas de código ao ficheiro ‘index.js’.
Vamos executar o comando que permite editar o ficheiro ‘index.js’:
nano -w index.js
De seguida, vamos acrescentar as seguintes linhas no final do ficheiro:
const http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(200);
res.write(dados);
res.end();
});
server.listen(8081, () => {
console.log("Server is running on http://localhost:8001");
});
Para executar, basta escrever:
node index.js
Podemos observar que o servidor está a correr na porta 8001, então basta aceder ao browser e ir a http://localhost:8001
Chegámos ao fim! Se conseguiu chegar até aqui, está de parabéns. Ficou com vontade de aprender mais sobre Node.js? Esperamos que sim. Até à próxima!