статический javascript не рендерится в jade (с помощью express / node.js) - PullRequest
4 голосов
/ 02 марта 2012

Надеюсь, у вас все хорошо.

Я неожиданно не могу отобразить любой внешний JavaScript в шаблонах Jade! Чтобы докопаться до сути вещей, я сократил ее до минимума:

Узел 0.6.11, Экспресс 2.5.8, нефрит 0,20,3

app.js

var express = require('express')
, routes = require('./routes');

var app = module.exports = express.createServer();

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

app.get('/', function(req, res){
  res.render('index', { title: 'Express' });
});

app.listen(3000);

layout.jade

!!!
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(type='text/javascript', src='/javascripts/script.js')
  body!= body

script.js

alert('hello!');

Мне кажется, что когда я запускаю сервер и загружаю http://localhost:3000/,, я должен сразу получить "привет!" сообщение, но оно просто бежит прямо на обычную страницу. Более того, если я вручную наберу

script
  alert('hello!')

в шаблон layout.jade Я получаю сообщение так, как должно. Просто не загружается статический скрипт. И я, конечно, проверил, что «script.js» находится в «/ public / javascripts /», как и должно быть Любой совет будет очень кстати !!!

Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 07 марта 2012

вам нужно передать ваш скрипт из контроллера следующим образом:

app.get('/', function(req, res){
  res.render('index', { title: 'Express', scripts: ['javascripts/script.js']});
});

и затем в вашей голове в layout.jade:

- each s in scripts
    script(src=s)
5 голосов
/ 30 марта 2013

Убедитесь, что ваши js-файлы представлены как статические ресурсы.

В layout.jade ...

!!!5
html
   head
      script(src='js/helper.js')

В app.js ...

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

Когда я помещаю папку 'js' в папку 'public', helper.js загружается без проблем.Просто, но я новичок во всем этом, и сначала я этого не понял.

3 голосов
/ 17 июля 2012

Почему у вас есть начальная косая черта в теге Jade? С вашим сценарием в <root_dir>/public/javascripts/script.js правильный способ ссылки на него в Jade - script(src="javascripts/script.js"). По крайней мере, это то, что работает над моей установкой. То же самое относится и к другим ресурсам, таким как CSS или изображения в каталоге / public.

0 голосов
/ 08 сентября 2016

Спасибо Робу (вы можете найти его ответ выше), за указание в правильном направлении.Я просто хочу добавить небольшую ссылку, чтобы она выглядела более естественной, чем любая магия.

В экспресс-документации здесь упоминается, что если статические файлы, такие как css, изображения и т. Д. Должны бытьзатем нужно объявить это с помощью

app.use(express.static("_dirName"));

Я столкнулся с той же проблемой при использовании изображений в HTML-коде.Теперь все работает нормально.

...