静态javascript无法在jade中呈现(使用express / node.js)

时间:2012-03-01 21:10:03

标签: node.js express pug

我希望你很好。

我突然无法在jade模板中呈现任何外部javascript!为了解决问题的根源,我将其剥离到最低限度:

节点0.6.11,Express 2.5.8,jade 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 个答案:

答案 0 :(得分:9)

你需要从控制器传递你的脚本:

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

然后在layout.jade的头脑中:

- each s in scripts
    script(src=s)

答案 1 :(得分:5)

确保您的js文件作为静态资源公开。

在layout.jade ...

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

在app.js ...

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

一旦我将'js'文件夹放在'public'文件夹下,helper.js加载时没有问题。很简单,但我对这件事情都很陌生,起初并没有这么做。

答案 2 :(得分:3)

为什么你的Jade脚本标签中有一个正斜杠'/'?使用<root_dir>/public/javascripts/script.js中的脚本,在Jade中引用它的正确方法是script(src="javascripts/script.js")。至少这是我的安装工作。其他资产(如CSS或/ public目录中的图像)也是如此。

答案 3 :(得分:0)

感谢Rob(你可以在上面找到他的答案),指向正确的方向。我只是想添加一点参考,所以它看起来比任何魔法更自然。

在快速文档here中,它提到如果要提供像css,图像等静态文件,那么需要使用

来声明它。

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

我在使用HTML代码中的图像时遇到了同样的问题。有了它,它现在工作正常。