0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

3. Koa2を使ってWebページを作成しよう 〜GETメソッドの利用〜

Last updated at Posted at 2020-09-25

記事一覧

第一回 Koa2の環境を構築する
第二回 Hello World!!を表示する

概要

KoaではGETとPOSTが異なる手段で認識されるため、GETパラメーターはkoa-routerを、POSTパラメーターはkoa-bodyを利用して、それぞれ分けて取得する必要があります。
なので、当ページではまずはGETのみについて扱い、POSTは次の投稿で書く予定です。
また、前回の続きとして進めて行くので、上手くいかない場合は以前の記事をご覧ください。

GETパラメーターを表示しよう

ますはGETリクエストをクライアントから送信するためのHTMLフォームを作成します。
/view/get-request.ejsを作成して以下のコードを追加してください。

get-request.ejs
<form action="/get-request/form" method="get">
    <input type="text" name="get-text">
    <input type="submit" value="送信">
</form>

次にHTMLのレンダリングを実行する処理を記載したRouterを作成します。
/router/get-request.jsを作成して以下のコードを追加してください。

get-request.js
const Router = require('koa-router');
const router = new Router();

router.get('/get-request', async (ctx) => {
    await ctx.render('get-request');
});

router.get('/get-request/form', async (ctx) => {
    // GETパラメータはミドルウェアのkoa-routerがctx.request.queryに配列で格納しており、
    // get-request.ejs内のテキストボックスのnameの値であるget-textをキーとして、入力した値が取得できる。
    let text = ctx.request.query['get-text'];
    console.log('テキスト: ' + text);
    await ctx.render('get-request');
});

module.exports = router;

作成したRouterを読み込む処理をindex.jsに追加します。
index.jsに以下のコードを追加してください。

index.js
const getRequestRouter = require('./router/get-request');
app.use(getRequestRouter.routes());
app.use(getRequestRouter.allowedMethods());

以下のコマンドでサーバーとして起動し、localhost:5000/get-request にブラウザでアクセスして下さい。
npm start

送信ボタンを押すと、コンソール上に入力した値が表示されていることが確認できます。

次に、これをブラウザの画面上で表示できるように、ejsファイルを修正していきます。
ejsはjsの処理でレンダリングする時に、jsからの値の受け取りやjsの実行ができます。
これを利用することでHTMLを動的に生成することができます。
具体的には、render()関数の第二引数に指定した値がejsに渡され、ejsファイル内にjsを記載して<% %>で囲うことで、レンダリング時にjsが実行されます。

/view/get-request.jsのrouterの処理を以下のように修正して下さい。

get-request.js
router.get('/get-request', async (ctx) => {
    await ctx.render('get-request');
});

router.get('/get-request/form', async (ctx) => {
    let text = ctx.request.query['get-text'];
    // 'getText'をkey、GETパラメータの値をvalueとしてget-request.ejsに連想配列を渡して、
    // レンダリングを実行
    await ctx.render('get-request', {getText: text});
});

以下のコードを/view/get-request.ejsに追加して下さい。

get-request.ejs
<% if(typeof getText === "undefined"){ %>
    <p>テキストを入力して下さい</p>
<% } else { %>
    <p>GET [<%= getText %>]</p>
<% } %>

if文でgetTextを受け取っているかの判定をして、受け取っていない場合は
<p>テキストを入力して下さい</p>
を出力し、受け取っている場合は
<p>GET [<%= getText %>]</p> を出力する。
<%= %> では、囲った変数の値をHTMLとしてレンダリングするので、GETパラメータで「HogeHoge」を渡している場合は
get-request2.png

が最終的に出力されます。

まとめ

以上でGETパラメータの取得と表示は完了です。
次の投稿では、初めにも触れたkoa-bodyを使ったPOSTパラメータの取得を書いていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?