Função fetch - JavaScript
A Fetch API oferece uma ferramenta simplificada, mas ao mesmo tempo poderosa e flexível, para acessar recursos de rede, em comparação com o XMLHttpRequest
O elemento central dessa API é a função fetch(). Ela possui a seguinte sintaxe:
const fetchPromise = fetch(resource [, init]);
O parâmetro obrigatório resource
init
A função fetch()
Promise
Definindo um Recurso no Servidor
Vamos analisar um exemplo simples. Primeiramente, precisamos de um recurso de rede para acessar. Para simular esse recurso, utilizaremos um servidor web local. O servidor web pode ser qualquer um, mas usaremos Node.js para este exemplo. Antes de criar a aplicação, é necessário instalar o Node.js. Contudo, em vez de Node.js, poderia ser qualquer outra tecnologia de servidor como PHP, ASP.NET, Python, entre outras, ou até mesmo um servidor web específico como Apache ou IIS.
Vamos criar uma pasta no disco rígido para os arquivos do servidor web. Por exemplo, no meu caso, a pasta será C:\app
server.js
const http = require("http");
const fs = require("fs");
http.createServer(function(request, response) {
if (request.url == "/hello") {
response.end("Fetch para Programício");
} else {
fs.readFile("index.html", (error, data) => response.end(data));
}
}).listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Este é um servidor simples, mas suficiente para nossa tarefa. Vamos revisar o código:
Primeiro, são importados os pacotes com a funcionalidade que usaremos:
const http = require("http"); // para processar solicitações recebidas
const fs = require("fs"); // para ler o arquivo index.html do disco rígido
Para criar o servidor, usamos a função http.createServer()
request
response
Na função manipuladora, usamos a propriedade request.url
response.end()
if (request.url == "/hello") {
response.end("Fetch para Programício");
}
Se a solicitação for para outro recurso, enviamos o arquivo index.html
else {
fs.readFile("index.html", (error, data) => response.end(data));
}
Para ler arquivos, usamos a função incorporada fs.readFile()
index.html
server.js
data
response.end(data)
Por fim, usamos a função listen()
http://localhost:3000/
Realizando uma Requisição com Fetch
Agora, na pasta do servidor, vamos definir um arquivo simples chamado index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<script>
fetch("/hello")
.then(response => response.text())
.then(responseText => console.log(responseText));
</script>
</body>
</html>
Na função fetch()
fetch("/hello")
Como a função fetch()
Promise
then()
fetch("/hello").then(response => response.text())
No método then()
response.text()
O método response.text()
Promise
.then(responseText => console.log(responseText));
Agora, no console, navegue até a pasta do servidor usando o comando cd
server.js
C:\app>node server.js Servidor iniciado em http://localhost:3000
Após iniciar o servidor, podemos acessar a página no navegador pelo endereço http://localhost:3000. A página exibirá o conteúdo, e no código JavaScript, a função fetch()
Como resultado, ao acessar o recurso "/hello", o servidor enviará a string "Fetch para Programício", que será exibida na página da web.
No exemplo acima, usamos um caminho relativo, mas também poderíamos usar um caminho absoluto especificando o protocolo, endereço do servidor e porta:
fetch("http://localhost:3000/hello")
.then(response => response.text())
.then(responseText => console.log(responseText));
Usando Fetch com async/await
Como a função fetch()
Promise
then()
async
await
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Programício</title>
</head>
<body>
<script>
async function getText() {
// obtendo o objeto de resposta
const response = await fetch("/hello");
// extraindo o texto da resposta
const responseText = await response.text();
console.log(responseText);
}
</script>
</body>
</html>
getText();