是否有任何模板引擎node.js表示像JSP一样?
我需要一个真正的jsp模式模板引擎,不像玉和ejs:
- 只要在网页文件夹中放入一个新的页面文件,在浏览器中input它的URI,它就会显示出来
- 删除这个页面文件,它就会消失
- 并支持
<%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还不是很接近。 🙁