3
respostas

Erro no código

Tentei reproduzir, coloquei o codigo da aula e mesmo assim o erro permaneceu, no console sai

Access to XMLHttpRequest at 'file:///C:/Users/CaminhoAteAsPastas/aluraframe/client/negociacoes' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https.

Mesmo lendo, relendo, voltando aula ta bem complicado por nao entender de fato o que esta acontecendo.

<!-- aluraframe/client/post.html -->
<html>

<head>
    <meta charset="UTF-8">
    <title>Negociações</title>
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/bootstrap-theme.css">
</head>

<body class="container">
    <form class="form">

        <div class="form-group">
            <label for="data">Data</label>
            <input type="date" id="data" class="form-control" required autofocus />
        </div>

        <div class="form-group">
            <label for="quantidade">Quantidade</label>
            <input type="number" min="1" step="1" id="quantidade" class="form-control" value="1" required />
        </div>

        <div class="form-group">
            <label for="valor">Valor</label>
            <input id="valor" type="number" class="form-control" min="0.01" step="0.01" value="0.0" required />
        </div>

        <button class="btn btn-primary" type="submit" onclick="sendPost(event)">Enviar dados para servidor</button>
    </form>

    <script>

        function sendPost(event) {

            event.preventDefault();
            console.log("Enviando post");

            //aqui você deve ler os dados do formulário
            const $ = document.querySelector.bind(document);
            const inputData = $('#data');
            const inputQuantidade = $('#quantidade');
            const inputValor = $('#valor');

            const negociacao = {
                data: inputData.value,
                quantidade: inputQuantidade.value,
                valor: inputValor.value
            };

            //construir o json
            const xhr = new XMLHttpRequest();
            xhr.open("POST", "/negociacoes", true);
            xhr.setRequestHeader("Content-type", "application/json");

            xhr.onreadystatechange = () => {

                if (xhr.readyState == 4) {

                    if (xhr.status == 200) {
                        inputData.value = '';
                        inputQuantidade.value = 1;
                        inputValor.value = 0.0;
                        inputData.focus();
                        alert('Negociação enviada com sucesso');
                    } else {
                        alert(`Não foi possível enviar a negociação: ${xhr.responseText}`);
                    }
                }
            }

            //enviar o XMLHttpRequest
            xhr.send(JSON.stringify(negociacao));
        }
    </script>
</body>

</html>
3 respostas

Fala ai Germano, tudo bem? Como você está rodando o front-end? Talvez vai ser necessário ajustar e liberar o CORS na API (caso o front não esteja no mesmo dominio do back).

Espero ter ajudado.

Talvez vai ser necessário ajustar e liberar o CORS na API (caso o front não esteja no mesmo dominio do back).

Talvez, nao sei, mas como ajusta ou libera esse CORS? o que é ele? nao tem nada sobre nos materiais, videos ou cursos anteriores.

Fala Germano, você pode utilizar a biblioteca cors: https://www.npmjs.com/package/cors

Ela funciona muito bem com o Express, você basicamente faz um app.use(cors()) no arquivo de configuração do Express na API.

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software