我不知道这是否真的是一个菜鸟问题,但我已经看过很多关于在 node.js 和 Express 中使用 Express 的文档。但我看到的是,他们总是使用另一种名为“Jade”的语言来呈现 HTML 文件。为什么?我想知道它是否需要使用 Jade,或者我可以使用 HTML 在 Express 中呈现模板。
2 回答
不,没有必要将 Jade 与 Express 一起使用。它只是一个流行的选项,因为Jade是生成应用程序的默认设置,并且由与Express相同的开发人员维护。
它们还倾向于彼此保持最新,例如添加模板继承jade
作为express
放弃对布局的支持。
但是,还有许多其他视图引擎为 Express 提供内置支持。而且,该consolidate
项目可以是调解人/粘合剂,因此您有更多选择:
- atpl
- 灰尘
- 生态
- 等
- ejs
- 哈姆
- 哈姆咖啡
- 车把
- 霍根
- 玉
- 爵士乐
- jqtpl
- 只是
- 酒
- 胡子
- QEJS
- 痛饮
- 模板化的
- 奶糖
- 下划线
- 海象
- 晶须
注意:我相信我误解了你的问题,一开始回答的太笼统了。但是,留下我在下面写的其余内容,以防它仍然有用。
没有必要在 Express 中使用视图引擎,但会有所帮助。
Express 可以简单地.send()
将一个值作为响应:
res.send(new Buffer('whoop'));
res.send({ some: 'json' });
res.send('some html');
但是,像 Jade 这样的视图引擎可以帮助从视图/模板生成更复杂的、数据驱动的内容。它们还可以帮助您按意图组织项目(关注点分离),因为视图通常保存在它们自己的文件中。
不过,如果您想使用res.render()
. 此方法取决于'view engine'
应用程序设置或您已配置app.engine()
.
app.set('view engine', 'jade'); // or ejs, swig, etc.
# ...
res.render('a-view'); // looks for `a-view.jade` based on `'view engine'`
app.engine('jade', require('consolidate').jade);
# ...
res.render('a-view.jade'); // matches the extension to the `.engine()`
如果您决定使用 Jade,则有多种插入数据的方法,包括将原始 HTML 放置在您的翡翠文件中的元素中。如果您手动绕过消毒剂,您还可以插入 HTML 片段!{ locals.someHtmlString }
您可以在此处查看以下 Jade 代码的演示(尽管没有传递locals
变量):http: //cssdeck.com/labs/qkkrzfes
//app.js
app.get('/', function(req, res){
locals.someData = {foo:'Bar'};
locals.someHTML = '<span>hello</span>'
res.render('someTemplate');
//someTemplate.jade
!!!
html
head
body
p.someClass This is plain text that goes in the paragraph
p#someId You can insert data into the text: #{locals.someData.foo}
p <a href='/'>You can just slap HTML in willy nilly</a>
p HTML is escaped by default: #{locals.someHTML}
p Escape HTML with \!{}: !{locals.someHTML}
pre
code=JSON.stringify(locals.someData, null, 2)