#概要
Denoでビューエンジンを使用してテンプレートエンジン「EJS」をレンダリングします。
テンプレートエンジン「EJS」は、HTMLをサーバー処理するために使用します。
ディレクトリ構成
/
├──public
├──index.ejs
app.ts
##モジュールをインポート
以下、2つのモジュールをインポートします。
・サーバーレイヤーを作成するためにoak
https://deno.land/x/oak
・HTML(レイアウト)を提供するビューエンジン
https://deno.land/x/view_engine
import { Application, Router } from "https://deno.land/x/oak/mod.ts";
import { viewEngine, engineFactory, adapterFactory } from "https://deno.land/x/view_engine/mod.ts";
ポートをリッスンするためにApplication
クラスとルートレイヤーを提供するためにRouter
をインポートしています。
##アプリケーションの初期化
インポート後にApplication
とRouter
を初期化します。
const app = new Application();
const router = new Router();
アプリケーションを初期化した後、ビューエンジンを使用するようにアプリケーションを構成します。
const ejsEngine = await engineFactory.getEjsEngine();
const oakAdapter = await adapterFactory.getOakAdapter();
ビューエンジンのボイラープレート(定型書式)の準備ができましたら、
次のコードでビューエンジンをミドルウェアとしてアプリケーションに渡します。
app.use(viewEngine(oakAdapter, ejsEngine));
##ルート作成
次にルートを作成します。
レンダリングするejsファイルを指定して、任意のdataを渡す設定をします。
router.get('/', (ctx: any) => {
ctx.render('./public/index.ejs', { data: { message: 'Hello' } })
});
ルーターを必要とするミドルウェアを追加します。
app.use(router.routes());
app.use(router.allowedMethods());
##アプリケーションを提供
これでapp.ts
ファイルが完成したので、
リッスンしてアプリケーションを提供します。
console.log('http://localhost:8000/');
await app.listen({ port: 8000 });
###完成イメージ
import { Application, Router } from 'https://deno.land/x/oak/mod.ts';
import { viewEngine, engineFactory, adapterFactory } from 'https://deno.land/x/view_engine/mod.ts';
const app = new Application();
const router = new Router();
const ejsEngine = await engineFactory.getEjsEngine();
const oakAdapter = await adapterFactory.getOakAdapter();
app.use(viewEngine(oakAdapter, ejsEngine));
router.get('/', (ctx: any) => {
ctx.render('./public/index.ejs', { data: { message: 'Hello' } })
});
app.use(router.routes());
app.use(router.allowedMethods());
console.log('http://localhost:8000/');
await app.listen({ port: 8000 });
##EJS構文のHTMLタグ追加
最後に次のようにEJS構文のHTMLタグを追加します。
そうすることで、app.ts
から渡されたmessage
を受け取ることができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
</head>
<body>
<p><%= data.message %></p>
</body>
</html>
##動作確認
次のコマンドを実行します。
$ deno run --allow-net --allow-read app.ts
以下にアクセスしてHello
と表示されればOKです。
http://localhost:8000/