フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

expressからSequelize ORMを利用して会員登録処理を実装する(テーブル作成まで)②

はじめに

  • 前回、会員登録フォーム用のテーブルを作成したので、そのテーブルに対してデータを登録する処理をexpress側で実装する px-wing.hatenablog.com

コード

  • POSTされたデータをもとにアクセストークンを作成する。有効時間は1時間
  • トークン作成後、ユーザー情報をDBに登録する
  • 既に登録済みメールアドレスとDB登録時のエラーが発生したらエラーメッセージ返すようにする
const express = require('express')
const router = express.Router()
const db = require('../models/index')
const logger = require('../lib/logger')
const jwt = require('jsonwebtoken')
const config = require('config')


router.post('/', async (req, res, next) => {
  let error_msg = []

// POSTされたデータをもとにアクセストークンを作成する。有効時間は1時間
  const token = 
    jwt.sign(
      {user_name: req.body.userName, 
        password: req.body.password,
        birth_day: req.body.birthDay,
        sex: req.body.sex,
        password: req.body.password}
    , 'hogehogehogehoge', { expiresIn: '1h' });
  try {
    const token = jwt.verify(token, config.secret_key);
  } catch(err) {
    logger.app.debug(err)
  }

  if (token) {
    db.user.findOrCreate(
      {where: {mail_address: req.body.mailAddress}, 
      defaults: {user_name: req.body.userName, 
                  password: req.body.password,
                  birth_day: req.body.birthDay,
                  sex: req.body.sex,
                  token: token,
                  password: req.body.password,
                  login_failure_count: 0}}).spread(function(user, created) {
        logger.app.debug(created)
        if (created) {
          user.save();
          res.json({success: "登録が完了しました!",error: '',user});
        }else{
          res.json({success: "",error: "このメールアドレスは既に登録済みです",user: {}});
        }
    }).catch((error)=>{
      error.errors.forEach(e => {
        logger.app.debug(e)
        error_msg.push(`{${e.path}: ${e.message}}`)
      });
      res.json({success: '',error: JSON.stringify(error_msg),user: {}});
    })
  }
});
module.exports = router;

db登録確認

  • DBに登録されていることを確認できました。
  • 日付が日本時間にならなかった場合、下記の記事をみてください。 px-wing.hatenablog.com

f:id:PX-WING:20200608083434p:plain