node:ORM、数据模型、脚本创建模型与服务层
生活随笔
收集整理的這篇文章主要介紹了
node:ORM、数据模型、脚本创建模型与服务层
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- node:ORM、數(shù)據(jù)模型、腳本創(chuàng)建模型與服務(wù)層
- 控制層
- 服務(wù)層
- MYSQL
- SQL
- ORM--sequelize
- 腳本
- 增加服務(wù)層(查詢數(shù)據(jù)庫(kù)放在服務(wù)層)
node:ORM、數(shù)據(jù)模型、腳本創(chuàng)建模型與服務(wù)層
插一句:若要?jiǎng)h除node_modules下的所有依賴,或者為了要跟換版本而刪除所有依賴,命令如下:
控制層
- 作用:參數(shù)驗(yàn)證,控制接口的調(diào)用邏輯
- 流程邏輯比喻:(驗(yàn)證參數(shù)–查詢數(shù)據(jù)庫(kù)–寫(xiě)入redis–生成jwt–返回json)
- 若把上面每一步代碼代碼都寫(xiě)在控制器,代碼冗余
服務(wù)層
- 數(shù)據(jù)庫(kù)的操作抽到服務(wù)層
- 生成jwt抽到一個(gè)工具箱,其它模塊需要直接導(dǎo)入
- 需要導(dǎo)入數(shù)據(jù)模型,用于操作數(shù)據(jù)庫(kù)
MYSQL
- 版本5.7.xx, 安裝mysql數(shù)據(jù)庫(kù)
- 導(dǎo)入sql腳本 表名 列名(字段名) 字段類(lèi)型 數(shù)據(jù)長(zhǎng)度 主鍵(唯一)
- Navicat Premium 使用工具導(dǎo)入sql,先連接到mysql,創(chuàng)建表初始化數(shù)據(jù)庫(kù)
SQL
- 只需了解簡(jiǎn)單增刪改查
- 麻煩:需要寫(xiě)sql并把返回?cái)?shù)據(jù)手動(dòng)封裝成json對(duì)象
ORM–sequelize
- object relational mapping 對(duì)象—數(shù)據(jù)庫(kù)表—映射關(guān)系
- 可以通過(guò)對(duì)象操作數(shù)據(jù)庫(kù),返回的數(shù)據(jù)也自動(dòng)封裝成對(duì)象
- 生成數(shù)據(jù)模型----與表字段對(duì)應(yīng)的一個(gè)sequelize-json對(duì)象
- 使用shell腳本生成數(shù)據(jù)模型—先連接到數(shù)據(jù)庫(kù)—生成
- sequelize-auto:自動(dòng)生成數(shù)據(jù)模型對(duì)象
- 執(zhí)行腳本:sh sequelize-modal.sh 不能在win的命令行中運(yùn)行
- 安裝:cnpm i -S sequelize@5 mysql2
腳本
- 工程自動(dòng)化中使用的非常多, 作用:一鍵完成所有工作
- linux—.sh win—.bat java—groovy test—py java—maven/gradle
sequelize-modal.sh腳本文件:
#!/bin/bash HOST="127.0.0.1" DB="loan" USER="root" PASS="root" PORT="3306" DIR="./models" #JSON_DEFINED="." EXEC="sequelize-auto -o ${DIR} -d ${DB} -h ${HOST} -u ${USER} -p ${PORT} -x ${PASS} -e mysql" #EXEC="sequelize-auto -o ${DIR} -d ${DB} -h ${HOST} -u ${USER} -p ${PORT} -x ${PASS} -e mysql -a ${JSON_DEFINED}"#sequelize是node最受歡迎的orm庫(kù),普遍使用 Promise. 意味著所有異步調(diào)用可以使用 ES2017 async/await 語(yǔ)法. #sequelize-auto是可以生成sequelize模型的一個(gè)工具 #npm install -g sequelize-auto mysql #-h 數(shù)據(jù)庫(kù)的IP地址 #-d 數(shù)據(jù)庫(kù)名 #-u 用戶名 #-x 密碼 #-p 端口 #-t 表名 #-e 數(shù)據(jù)庫(kù)類(lèi)型 #-a json定義文件路徑,可以追加一些自定義配置,如{"timestamps": false} #sequelize-auto -o . -h localhost -d jindu_loan -u root -x root -p 3306 #run $EXECconfig.js文件:
//配置文件const config = {//配置環(huán)境變量 若有環(huán)境變量則使用 否則使用默認(rèn)的port: process.env.PORT || 3000,//數(shù)據(jù)庫(kù)配置db: {database: "loan",username: "root",password: "root",host: "localhost",port: 3306,timezone: "+08:00", //時(shí)區(qū)dialect: "mysql", //方言define: {timestamps: false}} }export default config數(shù)據(jù)庫(kù)----excel表格(類(lèi)比)
用工具把sql腳本導(dǎo)入excel中 讓excel有表頭及初始數(shù)據(jù)
數(shù)據(jù)模型----數(shù)據(jù)表 與excel一一對(duì)應(yīng)的數(shù)據(jù)表格
服務(wù)層需要調(diào)用數(shù)據(jù)模型操作數(shù)據(jù)(增刪改查)
生成模型的文件哪里來(lái)的,手寫(xiě)的還是安裝的?—在sql定義的
腳本生成的模板文件在下圖箭頭所指文件夾:
在models文件夾下自寫(xiě)index.js文件導(dǎo)出所有模板文件:
增加服務(wù)層(查詢數(shù)據(jù)庫(kù)放在服務(wù)層)
user.service.js文件:
user.ctrl.js文件:(測(cè)試findUser方法)
//用戶控制器 操作用戶的接口 import logger from '../util/logger' import * as userService from '../service/user.service'const operations = {//用戶查詢query: function(req, res){logger.info("用戶查詢開(kāi)始")userService.findUser("admin", "admin@123").then(data=> {res.status(200).json(data)logger.info("用戶查詢結(jié)束")})},// 用戶登錄接口login: function(req, res){logger.info("調(diào)用用戶登錄接口開(kāi)始"+JSON.stringify(req.body))//......let msg = {msg:"登錄成功"}res.status(200).json(msg)logger.info("調(diào)用登錄結(jié)束")},// 用戶查詢列表接口list: function(req, res){//req--request res-responselogger.info("調(diào)用用戶查詢接口")let users = [{name:"小張"}, {name:"小王"}]//給瀏覽器返回?cái)?shù)據(jù)// res.status(200).send(users)res.status(200).json(users)logger.info("調(diào)用用戶查詢接口結(jié)束")} }export default operationsmy.route.js添加query接口:
//路由 import express from 'express' import userCtrl from '../controllers/user.ctrl'const router = express.Router(); //使用express框架自帶的路由 類(lèi)比vue-routerexport default function(app){//控制器接口--需要路由 接口請(qǐng)求方式(get post)//接口定義請(qǐng)求方式: get post delete put//用戶 路由地址 請(qǐng)求方式 控制器接口router.route('/user/query').get(userCtrl.query);router.route('/user/list').get(userCtrl.list);router.route('/user/login').post(userCtrl.login);// /api/user/login//權(quán)限//合同//把路由配置在myexpress實(shí)例上app.use('/api', router); } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的node:ORM、数据模型、脚本创建模型与服务层的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: node服务:日志、配置、路由与控制器
- 下一篇: node:http协议、sql、接口