我有一个多年来一直困扰着我的错误。我对Node和Jade模板系统很陌生,所以请耐心等待:我希望以下列方式添加样式表:
App.js(Express):
app.get('/', loadUser, function(req, res) {
var User = req.user;
// console.log(User.groups[2]);
// var groups = User.groups.split(',');
// OK DUh. This only gets called when the client has the script Socket.IO
// and client runs socket.connect()
getMessages(User, function(messages) {
var locals = {
scripts: [
'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',
'index.js'
],
stylesheets: [
'index.css'
],
user : User,
messages: messages
};
console.log('ok');
res.render('app.jade', {locals : locals});
});
});
在layout.jade中(用app.jade执行)我有:
!!! 5
html
head
title UI
link(rel='stylesheet', href = 'stylesheets/reset.css')
link(rel='stylesheet', href = 'stylesheets/layout.css')
- var stylesheets = stylesheets || [];
#{stylesheets}
- each stylesheet in stylesheets
- if(stylesheet.indexOf('http') >= 0)
link(rel='stylesheet', href = stylesheet)
- else
link(rel='stylesheet', href = "stylesheets/"+stylesheet )
再加上......我一直遇到同样的错误:
9. ' - if(stylesheet.indexOf(\'http') >= 0)'
Object function () {
var o = {}, i, l = this.length, r = [];
for(i=0; i
for(i in o) r.push(o[i]);
return r;
} has no method 'indexOf'
现在..问题是这个确切的模板在另一个传递相同变量的应用程序中工作:我真的很感激你们在这个棘手的问题上有任何建议!
谢谢! 马特穆勒
答案 0 :(得分:2)
所以这是你的问题......
在这一行:
res.render('app.jade', {locals : locals});
你传入的是当地人==>本地人,这是一个哈希(好吧,所以我是一个PERL人,我认为JS称他们'关联数组')
所以现在在你的玉器模板中我们有一行:
- var stylesheets = stylesheets || [];
在JADE中,您已经定义了变量“locals”,但其他所有内容都隐藏在其中,因此未定义变量“stylesheets”(而是定义了locals.stylesheets)。因此,这行代码将变量“stylesheets”设置为“[]”
所以这是我必须推测的地方。 “indexOf”是Array对象的一种方法。也许在JADE中构造的数组没有这个方法,而在node.js DO中构造的数组也有这种方法。这可以解释为什么你试图调用“stylesheets.indexOf(...)”
时出错