HTML in Express and node.js?



我不知道这是否真的是个小问题,但我已经看到了很多关于在node.js和Express中使用Express的文档。但我看到的是,他们总是使用另一种叫做"Jade"的语言来渲染HTML文件。为什么?我想知道它是否有必要使用Jade,或者我可以用HTML在Express中呈现模板。

不,没有必要在Express中使用Jade。它只是一个流行的选项,因为Jade是生成的应用程序的默认选项,并且由与Express相同的开发人员维护。

它们还倾向于相互保持最新,例如在jade中添加模板继承,因为express放弃了对布局的支持。

但是,还有许多其他视图引擎提供对Express的内置支持。而且,consolidate项目可以作为中介/粘合剂,因此您有更多的选择:

  • atpl
  • 灰尘
  • eco
  • ect
  • ejs
  • haml
  • haml咖啡
  • 车把
  • 霍根
  • 玉石
  • 爵士乐
  • jqtpl
  • 只是
  • 白酒
  • 胡子
  • QEJS
  • swig
  • 临时的
  • 太妃糖
  • 下划线
  • 海象

注:我想我误解了你的问题,一开始回答得太宽泛了。但是,留下我在下面写的其余内容,以防它仍然有用。

没有必要在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放置在Jade文件的元素中。如果使用!{ locals.someHtmlString } 手动绕过消毒剂,您也可以插入HTML片段

您可以在这里查看以下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)

最新更新