STUDY_LOG_KOTA

IoT, Webプログラミングなどの学習記録をします。

Node.js超入門 5章-6章 - SQL検索活用/バリデーション/サニタイズ

f:id:kota_ly:20220111002628p:plain

前置き

 前回は、SQLの基本CRUD(=Create, Read, Update, Delete)を試しました。
 今回は、SQLの検索機能 whereのプチ応用を動作確認し、6章に入りました。6章では、バリデーションと、サニタイズを学びました。

記事本文

SQL検索機能 whereの活用

前回、データベースから特定のレコードを取り出すために、where を活用する例を学びました。

const q = "select * from mydata where id = ?";
db.get(q, (err, row) => {......} );

このような書き方です。 この id = ? は完全一致を見る処理でしたが、他にも" !=, <, <=, >, >="などの条件式が使えることを学びました。

加えてワイルドカードが使える『LIKE検索』があります。

select * from mydata where mail like "%.gmail.com""

などとすると、gmail.comのメールアドレスのみを抽出可能。

バリデーション

入力された値が正しいことをチェックする機能です。 パッケージとして『Express Validator』を活用した事例をななめ読みしました。

例えば、年齢を入力するフォームに文字列などが入っていたら、再入力を求める必要があります。処理の流れは次のとおりです。
1)フォームの値を javascriptで受け取る
2)バリデーションで値のチェック
3-1)正しければデータベースに記録
3-2)問題があれば、エラーメッセージを返す。フォームには入力中の文字を返してあげる。(全部再入力させなくて済むように)

詳細は割愛しますが、次のような書き方ができるようです。

router.post('/add', [
      check('name', NAME は必ず入力してください。').notEmpty(),
      check('mail', 'MAIL はメールアドレスを記入してください。').isEmail()
], (req, res, next) => { .....}

.isEmail(), .isInit().... など便利なものがあって、自動でチェックできます。

サニタイズ(悪用防止)

入力フォームにHTMLのコード(DOM)や、Javascriptを入れる悪人に対処する方法があることを学びました。
ejsはHTMLのテンプレートに値を埋め込むレンダリング処理をしますが、HTMLやJavascriptを埋め込んだらそのまま動いてしまいますから、防ぐ必要があるそうです。
とか動いてしまいますよね。

防ぐ方法はいたって簡単で .escape() メソッドをつけるだけです。上記のプログラムにサニタイズを追加すると次のようになります。

router.post('/add', [
      check('name', NAME は必ず入力してください。').notEmpty().escape(),
      check('mail', 'MAIL はメールアドレスを記入してください。').isEmail().excape()
], (req, res, next) => { .....}

また、入力データに条件をつける .check() も学びました。生年月日の入力フォームで未来など指定するとエラーが出たりする処理ですね。
私が使ってる釣りの釣果記録アプリだと、魚を釣った時間が釣行開始時間、釣行終了時間の間にないとエラーが出たりします。そういう処理を作り込む必要があるのですね…。

次回

SQLデータベースについて学ぼうと思います。軽い入門書をkindleで探してみます。