静态的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"));