静态的JavaScript不在玉石(与express / node.js)
我希望你一切都好。
我突然无法在jade模板中渲染任何外部的javascript! 为了弄清楚事情的真相,我把它简化到最低限度:
节点0.6.11,Express 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 / ,我应该马上得到'你好!' 消息,但它只是直接运行到正常页面。 更重要的是,如果我手动input
script alert('hello!')
进入layout.jade模板,我就像我应该得到的消息。 它只是不加载静态脚本。 而且我确实已经检查了'script.js'是在'/ public / javascripts /'中。 任何build议将非常欢迎!
提前致谢
你需要像这样传递你的脚本:
app.get('/', function(req, res){ res.render('index', { title: 'Express', scripts: ['javascripts/script.js']}); });
然后在layout.jade的头上:
- each s in scripts script(src=s)
确保你的js文件被公开为静态资源。
在layout.jade中…
!!!5 html head script(src='js/helper.js')
在app.js中
app.use(express.static(__dirname + '/public'));
一旦我把'js'文件夹放在'public'文件夹下,helper.js加载没有问题。 很简单,但是我对这件事情是陌生的,一开始我就不明白。
为什么你的Jade脚本标记中有一个斜杠“/”? 使用<root_dir>/public/javascripts/script.js
中的script(src="javascripts/script.js")
,在Jade中引用它的正确方法是script(src="javascripts/script.js")
。 至less这是我的安装工作。 其他资源,如/ public目录中的CSS或图像也是如此。
感谢Rob(你可以在上面find他的答案),指向正确的方向。 我只是想添加一点参考,所以它看起来比任何魔法都更自然。
在这里的快速文档,它提到,如果像css,图像等静态文件将被服务,那么需要声明它使用
app.use(express.static("_dirName"));