我安装了 jade (npm install jade) 并转到他们的 github 页面获取一些示例。这是我想要执行的:
代码. Jade :
- var title = "Things"
h1= title
ul#users
- each user, name in users
- if (user.isA == "ferret")
li(class: 'user-' + name) #{name} is just a ferret
- else
li(class: 'user-' + name) #{name} #{user.email}
代码.js:
var jade = require('jade');
var options = {
locals: {
users: {
tj: { age: 23, email: '[email protected]', isA: 'human' },
tobi: { age: 1, email: '[email protected]', isA: 'ferret' }
}
}
};
console.log(jade)
jade.renderFile('code.jade', options, function(err, html){
if (err) throw err;
console.log(html);
});
我将这些文件保存在他们自己的文件夹中,cd 到那里并执行“node code.js”。但是,node 抛出一个错误并说 Jade 没有方法“renderFile”!你能告诉我我做错了什么,我应该怎么做才能解决它?
完整的错误信息:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
TypeError: Object #<Object> has no method 'renderFile'
at Object.<anonymous> (/home/yann/javascript/jade/code.js:18:6)
at Module._compile (module.js:402:26)
at Object..js (module.js:408:10)
at Module.load (module.js:334:31)
at Function._load (module.js:293:12)
at Array.<anonymous> (module.js:421:10)
at EventEmitter._tickCallback (node.js:126:26)
最佳答案
看起来较新版本的 Jade 使用不同的 API,没有更多的 'renderFile' 方法。看看这里的“公共(public) API”部分:https://github.com/visionmedia/jade
像这样的东西可能就是你想要的。请记住,您只需要读取该文件一次。如果是动态做的,一定不要同步读取。
var jade = require('jade');
var fs = require('fs');
var jadetemplate = jade.compile(fs.readFileSync('code.jade', 'utf8'));
var html = jadetemplate({
users: {
tj: { age: 23, email: '[email protected]', isA: 'human' },
tobi: { age: 1, email: '[email protected]', isA: 'ferret' }
}
});
console.log(html);
更新
这个答案在写的时候是有效的,但是
renderFile
在几个月后被添加到 92c314 中,所以现在可以使用了。关于javascript - Node 说 Jade 没有方法 "renderFile",为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7292477/