Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Uncaught SyntaxError: import declarations may only appear at top level of a module

Eu estou tendo problemas com esse erro, eu já revirei o código, mas não consigo achar o erro. :(

O erro aparece para esse código:

import { conectaApi } from "./conectaApi.js";

const formulario = document.querySelector('[data-formulario]');

async function criarVideo(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();

    await conectaApi.criaVideo(titulo, descricao, url, imagem);

    window.location.href = '../pages/envio-concluido.html';
}

formulario.addEventListener('submit', evento => criarVideo(evento));

Esses são os outros códigos:

import { conectaApi } from "./conectaApi.js";

const lista = document.querySelector('[data-lista]');

function constroiCard(titulo, descricao, url, imagem) {
    const video = document.createElement('li');
    video.className = 'videos__item';
    video.innerHTML = `
        <iframe width="100%" height="72%" src="${url}"
            title="${titulo}" frameborder="0"
            allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
            allowfullscreen></iframe>
        <div class="descricao-video">
            <img src="${imagem}" alt="logo canal alura">
            <h3>${titulo}</h3>
            <p>${descricao}</p>
        </div>
    `
    return video;
}

async function listaVideo() {
    const listaApi = await conectaApi.listaVideos();
    listaApi.forEach(elemento => lista.appendChild(constroiCard(elemento.titulo, elemento.descricao, elemento.url, elemento.imagem)))
}

listaVideo();
async function listaVideos() {
    const conexao = await fetch('http://localhost:3000/videos');
    const conexaoConvertida = await conexao.json();

    return conexaoConvertida;
}

async function criaVideo(titulo, descricao, url, imagem) {
    const conexao = await fetch('http://localhost:3000/videos', {
        method: 'POST',
        headers: {
            'content-type': 'application/json'
        },
        body: JSON.stringify({
            titulo: titulo,
            descricao: `${descricao} mil visualizações`,
            url: url,
            imagem: imagem
        })
    });

    const conexaoConvertida = await conexao.json();
    return conexaoConvertida;
}

export const conectaApi = {
    listaVideos,
    criaVideo
}

Obs: Meu navegador principal é o Firefox Developer, porém eu testei no Chrome e deu esse erro:

Unught SyntaxError: Cannot use import statement outside a module

2 respostas

Encontrei o erro, eu esqueci de adicionar o type="module" dentro do script do enviar-video.js.

solução!

Opa todo bem Samuel! Olá amigo, bem eu não tenho muito conhecimento nesta questão, mas eu e meu amigo, decidimos procurar algumas informações sobre, para ajuda-lo e também aumentar nosso conhecimento! Pelo que eu pesquisei, você deveria incluir um type="module" no seu script. Quando você usa type="module" ele faz o seu navegador interpretar o código como um modelo ECMAScript, e permitir o uso do import. Sem ele o navegador vai ler o codigo do JavaScript como um script clássico e não vai permitir o uso destes recursos avançados.

Bem e claro, isto se este arquivo for carregado em um arquivo HTML, se ele for um JS, você precisa executá-lo em um ambiente que suporte módulos ES6, como o Node.js.

Espero ter colaborado, sucesso para ti!