こんにちは。
本日は複数のページを作成する方法です。
今回はあえてExpress Generatorを使わずに作成します。
Express Generatorは以下の記事で紹介しています。
では、見ていきましょう。
概要
ページは3つ用意。
- index : 基本的なページ
- query : クエリパラメータで受け取った値を表示
- form : フォーム送信画面、フォームで受信した値を表示する画面
フォルダ構成
--sample -- public -- style.css -- router -- index.js -- query.js -- form.js -- views -- index.ejs -- query.ejs -- form.ejs -- app.js
各ソースの説明
簡単ではありますが各ソースの紹介をします。
style.cssは省略します。
app.js
このファイルで行っていることは以下。
- routerフォルダ配下のファイルrequireして読み込み
- アクセスに応じた処理を設定
- 必要なモジュールの読み込み
var express = require('express'); // routerフォルダ配下のファイルrequireして読み込み。 var indexRouter = require('./router/index'); var queryRoter = require('./router/query'); var formRouter = require('./router/form'); var app = express(); // エンジンがejsであることを設定 app.set('view engine', 'ejs'); // フォーム用モジュールの読み込み var bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({extended : false})); // アクセスに応じた処理を設定 app.use('/', indexRouter); app.use('/query', queryRoter); app.use('/form', formRouter); app.use(express.static('public')); var server = app.listen(3000, () => { console.log('Server start!'); });
index.js
「/」アクセス時の処理。
titleとcontentを返します。
var express = require('express'); var router = express.Router(); router.get('/', (req, res) => { res.render('index.ejs', { title : 'Index Page', content : 'Hello!'}); }) module.exports = router;
query.js
「/query」アクセス時の処理。
クエリパラメータに設定された値を取得して
titleとcontentを返します。
var express = require('express'); var router = express.Router(); router.get('/', (req, res) => { var name = req.query.name; res.render('query.ejs', { title : 'Query Page.', content : 'Hello ' + name + '.' }); }) module.exports = router;
form.js
「/form」アクセス時の処理。
getとpostの処理があります。
postの処理でフォーム送信された値を取得します。
var express = require('express'); var router = express.Router(); router.get('/', (req, res) => { res.render('form.ejs', { title : 'Form Page.', content : '何か入力してください。' }); }); router.post('/', (req, res) => { var msg = req.body['message']; res.render('form.ejs', { title : 'Form Page.', content : 'あなたは「' + msg + '」と入力しました。' }); }); module.exports = router;
index.ejs
indexページのテンプレートです。
titleとcontentを受け取って表示します。
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="content-type" content="texl/html; charset=UTF-8"> <title><%= title %></title> <link type="text/css" href="./style.css" rel="stylesheet"> </head> <body> <head> <h1><%= title %></h1> </head> <div role="main"> <p><%- content %></p> </div> </body> </html>
query.ejs
queryページのテンプレートです。
titleとcontentを受け取って表示します。
<!DOCTYPE html> <html lang="ja"> <head> ※index.ejsと同様のため省略 </head> <body> <head> <h1><%= title %></h1> </head> <div role="main"> <p><%- content %></p> </div> </body> </html>
form.ejs
formページのテンプレートです。
titleとcontentを受け取って表示します。
formタグでフォームの作成をしています。
<!DOCTYPE html> <html lang="ja"> <head> ※index.ejsと同様のため省略 </head> <body> <head> <h1><%= title %></h1> </head> <div role="main"> <p><%- content %></p> <form action="/form" method="POST"> <p><input type="text" name="message"> <input type="submit" value="送信"></p> </form> </div> </body> </html>
以上です。
まだまだ改善の余地はあるのですが
この方法でページを作成することができます。
Generatorが使えないときの備えて知っておくといいですね。