O projeto funciona por meio de link embed do youtube, ou seja, caso você coloque um texto qualquer no form de link, a API vai tentar fazer o GET desse vídeo, mas vai ficar algo mais ou menos assim:
Para resolver esse tipo de problema, criei uma função que valida o link por meio de regex. Basicamente a função verifica se o link começa com "https://www.youtube.com/embed/". Uma dúvida que tive durante esse desafio foi que eu tentei colocar a função direto na conectaApi.js, com um bloco if que lançava o erro. Dentro de mostraVideos.js, tentei fazer um bloco try/catch para pegar esse erro lançado no outro arquivo, colocando um alert na tela. O que acontecia na prática é que o alert aparecia porém a página recarregava automaticamente (lembrar que existe sim um evento.preventDefault() em meu código). Por falta de tempo (e talvez preguiça) fiz de uma maneira mais simples, usando um bloco if para testar a validação da url, colocando um alert e depois lançando um erro para que o vídeo não seja adicionado na página home.
Aqui está o código:
import { conectaApi } from "./conectaApi.js"
const formulario = document.querySelector("[data-formulario]")
function validaLink(url) {
const regex = /^https:\/\/www\.youtube\.com\/embed\/[a-zA-Z0-9_-]{11}$/
return regex.test(url)
}
async function criaVideo(evento) {
evento.preventDefault()
const imagem = document.querySelector("[data-imagem]").value
const url = document.querySelector("[data-url]").value
const titulo = document.querySelector("[data-titulo]").value
const descricao = Math.floor(Math.random() * 10).toString()
if(!validaLink(url)) {
alert("Formato de link inadequado!")
throw new Error()
}
try{
await conectaApi.criaVideo(titulo, descricao, url, imagem)
window.location.href = "../pages/envio-concluido.html"
} catch(e){
alert(e)
}
}
formulario.addEventListener("submit", evento => criaVideo(evento))