Почему я не могу получить доступ к своим файлам JavaScript от Expressjs / Nodejs? - PullRequest
15 голосов
/ 24 января 2012

Я начинаю экспериментировать с nodejs / expressjs / coffeescript и механизмом просмотра jade.

У меня есть следующая настройка, которая из того, что я вижу из приведенных примеров, выглядит довольно стандартной.

    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'

Моя структура каталогов следующая:

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

Файл индекса не содержит ничего, кроме строки: Это индексный файл

Файл layout.jade содержит:

!!! 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 

Когда я перехожу на localhost / ekmHoliCal / index, меня обслуживают, как и ожидалось, на странице индекса. Однако, если я просматриваю источник, я вижу ссылку на jquery:

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

и, если я нажму на эту ссылку, то увижу источник файла jquery.

Источник индексного файла также содержит ссылку на мой файл client.js следующим образом:

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

но когда я нажимаю на это, я получаю

Не удается получить /ekmholical/javascripts/client.js

Я видел этот связанный вопрос ( Express-js не может получить мои статические файлы, почему? ) и не видит, что я делаю неправильно

Ответы [ 2 ]

25 голосов
/ 24 января 2012

Ваш скрипт-тег имеет неверный путь.это должно быть

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

В экспрессе вы установили следующее:

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

Это говорит Express / node, что каталог public должен выступать в качестве вашего веб-корня.На все в нем можно ссылаться через /, поэтому, если у вас там также есть папка CSS, вы можете использовать /css/styles.css

4 голосов
/ 22 апреля 2017

Следуя сказанному Полом Армстронгом, вы также можете сделать это.

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

Это позволит вам ссылаться на ваш файл js следующим образом:

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