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

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

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

3

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

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.