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

No console do navegador só recebi um erro.

Finalizado esta atividade 2 (Remoção de livros) da aula 5 (Evoluindo a aplicação), quando clico no link "Remover" ao lado de qualquer um dos livros, sou redirecionado para a URL http://localhost:3000/livros# .

Achei estranho pois no meu console apresentou apenas o erro :

O recurso de “http://localhost:3000/remove-livro.js” foi bloqueado devido ao tipo MIME (“text/html”) não coincidir com (X-Content-Type-Options: nosniff).

e o warning :

Falha no carregamento do <script> com a fonte “http://localhost:3000/remove-livro.js”. livros:1:1

Será que ficou alguma coisa errado no meu código?

Ele está assim:

lista.marko :

<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h1> Listagem de livros </h1>

        <table id="livros">
            <tr>
                <td>ID</td>
                <td>Título</td>
                <td>Preço</td>
                <td>Editar</td>
                <td>Remover</td>
            </tr>
            <tr id="livro_${livro.id}" for (livro in data.livros)> 
                <td>${livro.id}</td>
                <td>${livro.titulo}</td>
                <td>${livro.preco}</td>
                <td><a href="#">Editar</a></td> 
                <td><a href="#" data-ref="${livro.id}" data-type="remocao">Remover</a></td> 
            </tr>
        </table> 

        <script src="./remove-livro.js">
        </script> 
    </body> 
</html>

remove-livro.js :

let tabelaLivros = document.querySelector('#livros');
tabelaLivros.addEventListener('click', (evento) => {
    let elementoClicado = evento.target;

    if (elementoClicado.dataset.type == 'remocao') {
        let livroId = elementoClicado.dataset.ref;
        fetch(`http://localhost:3000/livros/${livroId}`, { method: 'DELETE' })
            .then(resposta => {

                let tr = elementoClicado.closest(`#livro_${livroId}`);
                tr.remove();

            })
            .catch(erro => console.log(erro));

    }

});

rotas.js :

const LivroDao = require('../infra/livro-dao');
const db = require('../../config/database');

module.exports = (app) => {
    app.get('/', function(req, resp) {
        resp.send(
            `
                <html>
                    <head>
                        <meta charset="utf-8">
                    </head>
                    <body>
                        <h1> Casa do Código </h1>
                    </body> 
                </html>
            `
        );
    });

    app.get('/livros', function(req, resp) {

        const livroDao = new LivroDao(db);
        livroDao.lista()
                .then(livros => resp.marko(
                    require('../views/livros/lista/lista.marko'),
                    {
                        livros: livros
                    }
                ))
                .catch(erro => console.log(erro));
    });

    app.get('/livros/form', function(req, resp) {
        resp.marko(require('../views/livros/form/form.marko'))
    });

    app.post('/livros', function(req, resp) {
        console.log(req.body);

        const livroDao = new LivroDao(db);
        livroDao.adiciona(req.body)
                .then(resp.redirect('/livros'))   
                .catch(erro => console.log(erro));
    });

    app.delete('/livros/:id', function(req, resp) {
        const id = req.params.id;

        const livroDao = new LivroDao(db);
        livroDao.remove(id)
            .then(() => resp.status(200).end())
            .catch(erro => console.log(erro));

    });

};

livro-dao.js :

class LivroDao {

    constructor(db) {
        this._db = db;
    }

        ...   DEMAIS MÉTODOS OMITIDOS   ...

    remove(id) {
        return new Promise((resolve, reject) => {
            this._db.get(
                `
                    DELETE 
                    FROM livros
                    WHERE id = ?
                `,
                [id],
                (erro) => {
                    if (erro) {
                        return reject('Não foi possível remover o livro!');
                    }
                    return resolve();
                }
            );
        });
    }

}

module.exports = LivroDao;         
7 respostas

Boa tarde, Joaquim! Como vai?

Vc poderia colar aqui o código do custom-express.js?

Aí vai o custom-express.js :

require('marko/node-require').install();
require('marko/express');

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({
    extended: true
}));

const rotas = require('../app/rotas/rotas.js');
rotas(app);

module.exports = app;

Só uma observação:

Quando postei a pergunta, estava em um computador no trabalho (linux).

Agora estou em casa e o custom-express.js que postei acima e o que tenho no computador em casa (windows).

Tenho 99,99% de certeza que os códigos estão iguais!

Cheguei em casa agora e acabei esta atividade (Remoção de livros).

Aqui em casa (no windows) só apareceu no console os 2 erros (iguais) abaixo:

GET http://localhost:3000/remove-livro.js net::ERR_ABORTED 404 (Not Found)
GET http://localhost:3000/remove-livro.js net::ERR_ABORTED 404 (Not Found)
solução!

Dando prosseguimento ao curso, na atividade 4 (Arquivos estáticos) da aula 5, depois que a minha aplicação passou a verificar se as requisições que ela recebe são referentes a um arquivo estático app.use('/estatico', express.static('src/app/public')); e informar no arquivo lista.marko a nova localização do remove-livro.js, a aplicação conseguiu remover os livros sem nenhum erro.

Porém gostaria de saber porque no console do navegador do computador no trabalho (linux) só apareceu o erro

O recurso de “http://localhost:3000/remove-livro.js” foi bloqueado devido ao tipo MIME (“text/html”) não coincidir com (X-Content-Type-Options: nosniff).

e no console do navegador no computador aqui em casa (windows) o erro

GET http://localhost:3000/remove-livro.js net::ERR_ABORTED 404 (Not Found)

Opa, Joaquim! Vc tentou executar o projeto no linux novamente após implementar a solução? Talvez seja apenas uma mensagem com uma forma diferente de dizer a mesma coisa!

Experimente executar novamente a aplicação no linux, já com a solução implementada, e verifique se a tal mensagem continua aparecendo!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

No linux, depois da implementação também deixou de aparecer o erro. Provavelmente era "apenas uma mensagem com uma forma diferente de dizer a mesma coisa"!

Agora é seguir em frente na parte dois do curso!

Obrigado!

Boa, Joaquim! Siga em frente rumo à luz do conhecimento!

Espero que esteja curtindo e aproveitando ao máximo o conteúdo dos cursos de Node!

Sempre que precisar de algo é só mandar aqui no fórum da Alura!

Grande abraço e bons estudos, meu aluno!

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