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

Como o caminho de um arquivo JS no meu projeto de Node.js deve ser?

Eu quero mostrar um arquivo .ejs quando meu servidor node.js estiver rodando

Esse é o meu código no app.js:

app.get('/imc',function(req,res){
   res.render("imc/calculaImc");
})

Até aí, tudo beleza e funcionando com arquivo. Porém, dentro desse .ejs Estou passando um arquivo JS:

<script src= "test.js"> </ script>

Como devo passá-lo para o arquivo .ejs? Que estrutura de caminho devo usar? Fiquei sabendo que posso usar um static asset no app.js. Ou usar uma pasta pública.

Entretanto, não sei como realizar nenhuma dessas formas.

10 respostas

Oi João, tudo bem? Na documentação do express ele disponibiliza um exemplo bem prático: http://expressjs.com/en/starter/static-files.html.

Primeiro você faz uso do servidor estático, indicando qual pasta terá arquivos a serem acessados diretamente, neste exemplo é a pasta public:

app.use(express.static('public'))

depois, para carregar os arquivos desta pasta, você pode usar o link direto para ele desconsiderando o nome da pasta:

<script src="/arquivo.js"></script>

testa pra gente?

Recebi esse erro

express.js:4
app.use(express.static('static'))
        ^

ReferenceError: express is not defined
    at Object.<anonymous> (C:\Users\JoaoVictor\Documents\JV\Node\ProjetoNode\config\express.js:4:9)

Meu código do express.js:

var app = require('express')();
app.set('view engine', 'ejs');
app.set('views','./app/views')

app.use(express.static('static'))

module.exports = function() {
    return app;
}

Tá dando esse erro pq to exportando?

Já tentei colocando esse trecho

app.use(express.static('public'))

no meu app.js também.

Tá aí meu app.js:

var porta = 3000;

var app = require ('./config/express')();

var rotaProdutos = require('./app/routes/produtos')(app);
var rotaImc = require('./app/routes/imc')(app);
var rotaHome = require('./app/routes/home')(app);

app.get('/imc',function(req,res){
     res.render("imc/calculaImc");
})

app.listen(porta,function(){
    console.log("Server running at http://localhost:" + porta + "/");
})

Neste caso, fará assim João, no seu app.js

var porta = 3000;
var express = require ('./config/express');
var app = express();

var rotaProdutos = require('./app/routes/produtos')(app);
var rotaImc = require('./app/routes/imc')(app);
var rotaHome = require('./app/routes/home')(app);

app.use(express.static('public'))
app.get('/imc',function(req,res){
     res.render("imc/calculaImc");
})

app.listen(porta,function(){
    console.log("Server running at http://localhost:" + porta + "/");
})

Continuo tendo erro :/

C:\Users\JoaoVictor\Documents\JV\Node\ProjetoNode\app.js:10
app.use(express.static('public'))
                      ^

TypeError: express.static is not a function
    at Object.<anonymous> (C:\Users\JoaoVictor\Documents\JV\Node\ProjetoNode\app.js:10:23)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

Oi João, é estranho não ter funcionado. No projeto do curso no GitHub está configurado praticamente do mesmo jeito: https://github.com/alura-cursos/node-js/blob/master/casadocodigo-javascript-master/config/express.js

Tenta mudar a ordem das linhas. Talvez seja isso.


var express = require ('./config/express');
var app = express();
var porta = 3000;

app.use(express.static('public'));

var rotaProdutos = require('./app/routes/produtos')(app);
var rotaImc = require('./app/routes/imc')(app);
var rotaHome = require('./app/routes/home')(app);

app.get('/imc',function(req,res){
     res.render("imc/calculaImc");
})

app.listen(porta,function(){
    console.log("Server running at http://localhost:" + porta + "/");
})

No código aí do github essa linha do código tá no config do express, não do app. Tem que ser lá? E dentro do module.exports?

Não precisa estar dentro do module.exports João. Do jeito que postei o código anterior, deveria funcionar. Caso não funcione, você poderia disponibilizar seu projeto pra mim ver mais de perto? Poderia por no GitHub, por exemplo, ou mesmo criar um zip e me passar um link de download aqui?

Beleza!

Muito obrigado, Wanderson. O link é esse: https://github.com/albjoaov/Redes1

solução!

Oi João, o problema é que nós estávamos tentando configurar isso no lugar errado. O arquivo é o express.js dentro da pasta config.

var express = require('express');
var app = express();
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.set('views','./app/views')

module.exports = function() {
    return app;
}