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

Erro HTTP 404 - não encontrado

Olá! Realizei todos os procedimentos do exercício, subi o servidor com o comando "node app.js", recebo a mensagem de Servidor rodando!", mas ao digitar o endereço "http://localhost:3000/views/produtos/lista.js", aparece a mensagem "HTTP 404 - não encontrado". Segue o arquivo app.js:

var express = require('express');
var app = express();
app.set('view engine', 'ejs');
app.get('/produtos', function(req, res) {
res.render('produtos/lista.ejs');
});
app.listen(3000, function() {
console.log("Servidor rodando!");
});

Criei o diretório views e dentro dele, o arquivo lista.ejs. O que será que fiz de errado?

7 respostas

Olá, José.

Pra essa URL funcionar você tem que criar um toda, hoje você tem uma rota que responde a método get:

app.get('/produtos', function(req, res) {
    res.render('produtos/lista.ejs');
});

Entre na URL http://localhost:8080/produtos pelo navegador que vai aparecer o que você fez até o momento. Se não der certo avisa aqui :-)

Olá, Marco! Muito obrigado! Quando chegar em casa, vou testar sua dica! Agora, não entendi esse endereço, se na função foi passada a rota produtos/lista e também foi especificada a porta 3000. Um abraço!

Olá, José.

Vou explicar o código para você considerando que você não entendeu nada. Provavelmente vou te explicar coisas que você já sabe, mas minha ideia é não deixar você com dúvidas :-)

Código:

var express = require('express');

Explicação: Essa linha está chamando o framework express e guardado a referência dele na variável express. O bacana do framework é que não vamos precisar tratar todas as rotas na mão. Rotas são as URLs que vamos deixar disponível para o usuário acessar dentro da nossa aplicação ou site.

===========================================

Código:

var app = express();

Explicação: Iniciando o express para criar nossa app, agora todos os recursos do framework vai estar disponível pela variável app.

===========================================

Código:

app.set('view engine', 'ejs');

Explicação: Estamos definindo que nossa app com o express vai utilizar como gerenciador de template o embeddedjs. Isso vai facilitar basta a leitura do código da nossa camada de view.

===========================================

Código:

app.get('/produtos', function(req, res) {
    res.render('produtos/lista.ejs');
});

Explicação: Esse código é um dos mais interessantes. Nele nós estamos criando uma rota chamada /produto dentro da nossa aplicação. Quando o usuário acessar essa rota pelo navegador nós eximos para a view produtos/lista.ejs, essa view está usando o nosso gerenciador de template embeddedjs.

===========================================

Código:

app.listen(3000, function() {
    console.log("Servidor rodando!");
});

Explicação: Aqui nós estamos iniciando nosso servidor NodeJS pelo express e falando que ele vai rodar local na porta 3000, assim que o servidor estiver de pé aparece no console (terminal) a mensagem "Servidor rodando!". Por isso que nós acessamos o site pelo navegador na url http://localhost:3000.

===========================================

Se ficar alguma dúvida é só falar :-)

Olá, Marcão! Na verdade, não expliquei direito a minha dúvida! Você me pediu para acessar o endereço "http://localhost:8080/produtos. Mas definimos como porta padrão a porta 3000 e a rota contém /produtos/lista.ejs, sendo lista.ejs o arquivo criado dentro da pasta view. Contudo, o endereço a ser acessado vai até /produtos, conforme você sugeriu. Isso é que não compreendi, apesar de que ainda não realizei o teste. Vou fazê-lo assim que chegar em casa à noite. Um abraço!

Mal, man. Eu falei para você acessar a URL com a porta errada. Você tem que acessar a URL na porta 3000 mesmo: http://localhost:3000

Sorry. Bom, quando você testar avisa aí pra ver se consigo ajudar de alguma forma.

Olá, Marco! Ao digitar no navegador o endereço http://localhost:3000/produtos, recebo a seguinte mensagem:

Error: Failed to lookup view "produtos/lista.ejs" in views directory "c:\casadocodigo\views" at EventEmitter.render (c:\casadocodigo\node_modules\express\lib\application.js:579:17) at ServerResponse.render (c:\casadocodigo\node_modules\express\lib\response.js:960:7) at c:\casadocodigo\app.js:5:5 at Layer.handle [as handle_request] (c:\casadocodigo\node_modules\express\lib\router\layer.js:95:5) at next (c:\casadocodigo\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (c:\casadocodigo\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (c:\casadocodigo\node_modules\express\lib\router\layer.js:95:5) at c:\casadocodigo\node_modules\express\lib\router\index.js:277:22 at Function.process_params (c:\casadocodigo\node_modules\express\lib\router\index.js:330:12) at next (c:\casadocodigo\node_modules\express\lib\router\index.js:271:10)

O que será dessa vez? Um abraço!

solução!

Olá! Finalmente consegui descobrir e resolver o meu problema! Na verdade, foi uma desatenção minha, pois não criei a pasta produtos para, nela, criar o arquivo lista.ejs. O referido arquivo estava dentro da pasta views, por isso a mensagem acima. Valeu, Marco, por tentar me ajudar!