Blockchain code Metaverse VR

Crypto×VR×SmartContract(459)

スポンサーリンク

//tips

//smart contract

新しいボードモデルを作成。

npx sequelize-cli model:generate --name Board --attributes userId:integer,message:string

これによりモデルフォルダにboard.jsファイルが作成されたので、対応させたい形に修正。

'use strict';

module.exports = (sequelize, DataTypes) => {

const Board=sequelize.define('Board',{
//モデルの関連付けをアソシエーション機能で行い、その際に必要なのがuserId

userId:{
type:DataTypes,INTEGER,
validate:{
notEmpty:{
msg:"利用者は必須です。"
}
}
},
message:{
type:DataTypes.STRING,
validate:{
notEmpty:{
msg:"メッセージは必須です。"
}
}
}
},{});

Board.associate=function(models){
Board.belongsTo(models.User);
};
return Board;
};

npx sequelize-cli db:migrateでマイグレーションを実行。

これによりデータベースファイル内にBoardモデルに対応するテーブルが作成された。db_dev.sqlite3を開いて確認できた。

associateではテーブル間での関連付けを行なっており、BoardモデルとUSERモデルが連携できるようになっている。

ログイン処理をusers.jsに追加。

router.get('/login', (req, res, next) =>{
//ログインアクセス時の表示
var data={
title:'Uses/Login',
content:'名前とパスワードを入力ください。'
}

res.render('users/login',data);

});

router.post('/login', (req, res, next) =>{
//ログインフォーム送信後の表示

db.User.findOne({
//送信されたnameとpassでUserモデルを取得
//これは一つのレコードのみ取得できる
where:{
name:req.body.name,
pass:req.body.pass
}
})
.then(usr=>{
//モデル取り出し後の処理
if(usr!=null){
req.session.login=usr;
let back=req.session.back;
if(back==null){
back='/';
}
res.redirect(back);
}else{
var data={
title:'Uses/Login',
content:'名前かパスワードに問題があります。再度入力ください。'
}
res.render('users/login',data);
}

});

別途routesフォルダ内のboards.jsファイルを作成。

const express = require('express');
const router = express.Router();
const db = require('../models/index');
const { Op } = require("sequelize");

const pnum = 10;

// ログインのチェック
function check(req,res) {
//nullならログインしていないのでリダイレクトさせ、trueを返す
if (req.session.login == null) {
//ログイン後に戻るページのアドレスを.backで渡せる
req.session.back = '/boards';
res.redirect('/users/login');
return true;
} else {
return false;
}
}

// トップページ
router.get('/',(req, res, next)=> {
res.redirect('/boards/0');
});

// トップページにページ番号をつけてアクセス
//番号を使い一定数ごとにBoardを取り出して表示
router.get('/:page',(req, res, next)=> {
if (check(req,res)){ return };
const pg = req.params.page * 1;
//ページ版んごうはpageパラメータから取り出し、整数にするため1をかける
//ログイン中の場合は処理実行
//Boardから指定のページの取り出し
db.Board.findAll({
//ページ番号と表示数をかけて、offset値を取り出す位置を確定
//limitは取り出す個数
offset: pg * pnum,
limit: pnum,
//取り出す値の並び順を指定
order: [//配列を使用
//値が新しいものから順
['createdAt', 'DESC']//ASCまたはDESCを選択する
],
//関連づけられたモデルの読み込み
include: [{
model: db.User,
required: true//modelを読み込むかどうかを指定
}]
}).then(brds => {
var data = {
title: 'Boards',
login:req.session.login,
content: brds,
page:pg
}
res.render('boards/index', data);
});
});

// メッセージフォームの送信処理
router.post('/add',(req, res, next)=> {
if (check(req,res)){ return };
//フォーム送信されたメッセージをBoardに追加する処理
db.sequelize.sync()
.then(() => db.Board.create({
userId: req.session.login.id,//ログインユーザーのUserからid取り出し
message:req.body.msg
})
.then(brd=>{
res.redirect('/boards');
})
.catch((err)=>{
res.redirect('/boards');
})
)
});

// 利用者のホーム
router.get('/home/:user/:id/:page',(req, res, next)=> {
if (check(req,res)){ return };
const id = req.params.id * 1;
const pg = req.params.page * 1;
db.Board.findAll({
where: {userId: id},
offset: pg * pnum,
limit: pnum,
order: [
['createdAt', 'DESC']
],
include: [{
model: db.User,
required: true
}]
}).then(brds => {
var data = {
title: 'Boards',
login:req.session.login,
userId:id,
userName:req.params.user,
content: brds,
page:pg
}
res.render('boards/home', data);
});
});

module.exports = router;

これをapp.jsに組み込む

var boardsRouter=require('./routes/boards');
app.use('/boards',boardsRouter);

最後にejsを追加していく。

完成して無事に動かすことができた。

開発を行う上でMarkdownという技術系ドキュメントを書く際の簡易言語があるのでそちらも触る。

Ex-gen-appに追加する形で作っていく。

npm install markdown-it

モデルを作成。markdata.jsが生成された。

npx sequelize-cli model:generate --name Markdata --attributes userId:integer,title:string,content:text

これを修正して利用していく。修正したものをマイグレーションしてデータベースに反映。

npx sequelize-cli db:migrate

 

人気の記事

1

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

4

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HACKER , 2022 All Rights Reserved Powered by AFFINGER5.