2012-01-24 9 views
14

Sto iniziando a sperimentare con nodejs/expressjs/coffeescript e il motore di visualizzazione jade.Perché non riesco ad accedere ai miei file javascript da Expressjs/Nodejs?

Ho il seguente setup che da quello che vedo dagli esempi che ci sono in giro sembra piuttosto standard.

app = express.createServer().listen process.env.PORT 

    app.configure -> 
     app.set 'views', __dirname + '/views' 
     app.set 'view engine', 'jade' 
     app.set 'view options', layout: true 
     app.use express.bodyParser() 
     app.use express.static(__dirname + '/public') 
     app.use app.router 


    app.get '/ekmHoliCal/index', (req, res) -> 
     res.render 'index' 

La mia struttura di directory è la seguente:

-- ekmHoliCal 
    -- public 
    --javascripts 
      client.js 
    -- views 
     index.jade 
     layout.jade 

Il file di indice contiene altro che la linea: Questo è il file di indice

il file layout.jade contiene:

!!! 5 
html(lang="en") 
    head 
     title Users 
     script(type="text/javascript", src="http://code.jquery.com/jquery-1.6.4.js") 
     script(type="text/javascript", src="/ekmholical/javascripts/client.js") 
    body 
     div!= body 

Quando navigo su localhost/ekmHoliCal/index mi viene servita la pagina indice come previsto. Tuttavia, se ho vista origine vedo un link verso a jquery:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"> 

e se clicco su quel link abbastanza sicuro vedo l'origine del file di jQuery.

La fonte file indice contiene anche un link al mio file Client.js come segue:

<script type="text/javascript" src="/ekmholical/javascripts/simon.js"></script> 

ma quando clicco su che ricevo

non possono ottenere/ekmholical/javascript/cliente. js

ho visto questa domanda relativa (Express-js can't GET my static files, why?) e non può vedere quello che sto facendo male

risposta

22

Il tag script ha il percorso sbagliato. dovrebbe essere

<script type="text/javascript" src="/javascripts/simon.js"></script> 

in veloce, che hai impostato il seguente:

app.use express.static(__dirname + '/public') 

che racconta esprimere/nodo che la directory public dovrebbe agire come la vostra web root. Tutto in esso può essere referenziato tramite /, quindi se si dispone anche di una cartella CSS, è possibile utilizzare

+0

Grazie Paolo. Avevo già provato il tuo suggerimento senza successo. Detto questo, la tua risposta è corretta. Quello che ho negato di menzionare è che sto eseguendo questo su Windows sotto IIS e sembra essere la mia configurazione del sito sotto IIS che stava causando il problema. –

1

In seguito a ciò che ha detto Paul Armstrong, si potrebbe anche fare questo.

app.use('/public', express.static(__dirname + '/public'); 

Questo vi permetterà di fare riferimento il file js come questo:

<script src="/public/javascripts/simon.js"></script> 
Problemi correlati