4

jade や ejs とは異なり、実際の jsp モードのテンプレート エンジンが必要です。

  1. 新しいページ ファイルを Web ページ フォルダに配置し、ブラウザに uri と入力すると、表示されます。
  2. このページファイルを削除すると消えます
  3. <%include %>jspのようなサポート(クエリパラメータをサポート)

もっと運が良ければ、Apacheタイルのようなタイルをサポートします。Apache タイルでは、次のようなテンプレート ページを記述できます。

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>

と入力main.jsp?body=content1.jspすると、main.jsp、dress layout/simple.jsp 内に content.jsp が表示されます。

上記のランタイムをすべて実行できます。Web サーバーを再起動する必要はありません。

4

2 に答える 2

3

ejs はおそらく最も近いものです。 https://github.com/visionmedia/ejs

./ビュー/アカウント

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

./routes/account.js:

   res.render('account', { user: user });
于 2012-11-07T20:08:03.000 に答える
0

私はこれをきちんと実装しました。expressの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);
  }  
});

今、テストします。

node index.js、これで実行中です。

test.htmlという名前の新しいファイルをビューに配置します

test.html:

<% include header.html %>

<h1>Test</h1>

<% include footer.html %>

と入力test.shtml?title=Test Pageすると、このページが表示されます。そして、 header.html内のパラメータタイトルバインドをクエリします。

ええと、しかし、レンダリングはres.render()によって制御されるため、ページで行うことは少なくなります。レンダリングする前に何かをしたい場合、またはHTMLコンテンツではなく何かを直接出力したい場合は、見てみましょう。

controllersという名前のフォルダーを作成してから、test.jsという名前のファイルを作成します。

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

もう一度入力test.shtml?title=Test Pageすると、コンソールにtest.jsの出力「dosometing ....」が表示され、ブラウザに同じ名前のページが表示されます。

すべてのコントローラーのjsファイルとhtmlファイルはすべて動的です~~~

したがって、テーマモードはまだApacheタイルにあまり近づいていません。:(

于 2012-11-08T08:58:35.923 に答える