是否有任何模板引擎node.js表示像JSP一样?

我需要一个真正的jsp模式模板引擎,不像玉和ejs:

  1. 只要在网页文件夹中放入一个新的页面文件,在浏览器中input它的URI,它就会显示出来
  2. 删除这个页面文件,它就会消失
  3. 并支持<%include %>像jsp(支持查询参数)

如果更多的运气,它会支持像阿帕奇瓷砖瓦。 在阿帕奇瓷砖,我可以写一个模板页面

 main.jsp: <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <tiles:insertTemplate template="/layout/simple.jsp"> <tiles:putAttribute name="header" value="/common/header.jsp" /> <tiles:putAttribute name="left" value="/common/leftmenu.jsp" /> <tiles:putAttribute name="body" value="<%= request.getParameter("body")%>" /> <tiles:putAttribute name="footer" value="/common/footer.jsp" /> </tiles:insertTemplate> 

现在inputmain.jsp?body=content1.jsp ,就会看到content.jsp出现在main.jsp里面,dress layout / simple.jsp。

我可以做所有以上的运行时,不需要重新启动web服务器。

ejs可能是最接近的事情。 https://github.com/visionmedia/ejs

./views/account

 <% if (user) { %> <h2><%= user.name %></h2> <% } %> 

./routes/account.js:

  res.render('account', { user: user }); 

我已经完全实现了这一点。 让我们在ejs例子中添加一些内容。 https://github.com/visionmedia/express

修改index.js,先导入vm和fs

 var express = require('express'), fs = require('fs'), vm = require('vm'); 

那么,路由所有* .shtml(任何扩展,你会)

 app.get('*.shtml', function(req, res){ var url = req._parsedUrl.pathname; url = url.substring(1, url.length - 6); //console.log(req); var jsPath = 'controllers/' + url + '.js'; //console.log('jsPath ' + jsPath); if(fs.existsSync(jsPath)){ var code = fs.readFileSync(jsPath); var context = vm.createContext({req : req, res : res, url : url, console : console}); vm.runInContext(code, context, jsPath); } else { res.render(url, req.query); } }); 

现在,testing。

节点index.js,现在我们正在运行。

在视图中放置一个名为test.html的新文件

 test.html: <% include header.html %> <h1>Test</h1> <% include footer.html %> 

键入test.shtml?title=Test Page ,所以这个页面显示。 并在header.html中查询参数标题绑定。

好吧,但是我们可以在页面中less做,因为渲染是由res.render()控制的。 如果我们想在渲染之前做一些事情,或者直接输出一些东西而不是HTML内容,那么让我们来看看。

创build一个名为controllers的文件夹,然后创build一个名为test.js的文件。

 test.js console.log('do something....'); res.render(url, req.query); 

再次inputtest.shtml?title=Test Page ,你会在控制台上看到test.js输出'do someting ….',然后在浏览器中显示同名页面。

所有的控制器的js和html文件都是dynamic的~~~

因此主题模式与Apache Tiles还不是很接近。 🙁