Подтвердить что ты не робот

Почему я не могу добраться до файлов javascript из Expressjs/Nodejs?

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

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

    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>

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

Невозможно GET/ekmholical/javascripts/client.js

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

4b9b3361

Ответ 1

Тэг script имеет неправильный путь. это должно быть

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

В express вы установили следующее:

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

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

Ответ 2

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

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

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

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