持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
博客系统----掌握react+node配合开发
流程:后端------接口文档------前端
1. mysql数据库--安装
安装mysql花费了我将近两个多小时的时间,差一点就去tb花重金了...还好在哦我的坚持不懈下,成功安装并修改了密码,创建了数据库blog!!!
对了,我修改了两次的mysql密码是Admin2022,记载。
2. 搭建服务
在vscode终端:npm init -y
npm install --save express
npm install dotenv --save
npm install --save-dev nodemon //自动检测
npm i sequlize(核心包)
npm i mysql2 手动为所选数据库安装驱动程序
入口文件和.env配置文件中配置server和mysql,定义端口号域名、数据库名称、密码等等...
然后在app.js读取.env配置文件,然后引用express,去配置node后端的启动服务号。
编辑环境变量:
# server
HOST = localhost
PORT = 3000
概念:orm是什么?object relation mapping,操作对象--映射。在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只需要像平时操作对象一样。不用创建具体的表了,不用创建某一个字段。
app.js中连接数据库,去实例化orm,将数据库名称、账号、密码...添加到配置中
#mysql
DB_NAME=blog
DB_USERNAME=root
DB_PASSWORD=Admin2022
DB_DIALECT=mysql
DB_HOST=localhost
DB_PORT=3306
编辑app.js中声明express,引入app概念。
const express = require('express')
const app = express()
变量已经声明成功,接下来就是将数据库连接与服务器连接模块化开发(分离开)
数据库的连接:
- 构造Sequelize函数
const {Sequelize} = require("sequelize")
const sequelize = new Sequelize(process.env.DB_NAME, process.env.DB_USERNAME, process.env.DB_PASSWORD, {
dialect: process.env.DB_DIALECT,
host: process.env.DB_HOST,
logging: false,
port: process.env.DB_PORT
})
module.exports = sequelize//导出
- 定义连接数据库的函数
const sequelize = require("../db/sequelize")//引入
const dbConnection = async () => {
return new Promise(async (resolve, reject) => {
try {
await sequelize.authenticate()
console.log(`MYSQL connect success on ${process.env.DB_PORT}`);
resolve()
} catch (error) {
console.log(`MYSQL connect fail on ${process.env.DB_PORT}`, error);
reject(error)
}
})
}
module.exports = dbConnection//导出
- 初始化函数
const dbConnection = require("../db/connection") //引入
const initDB = async () => {
return new Promise(async (resolve, reject) => {
try {
await dbConnection() //调用
resolve()
} catch (error) {
await dbConnection()
reject(error)
}
})
}
module.exports = initDB
服务器连接:
- 初始化服务器连接
const initServer = async (app) => {
return new Promise((resolve,reject)=>{
const PORT = process.env.PORT || 8080
app.listen(PORT, () => {
console.log(`SERVER is running on http://localhost:${process.env.DB_PORT}`);
resolve()
})
.on('error',(error)=>{
console.log(error);
reject()
})
})
}
module.exports = initServer //导出
整合数据库连接与服务器连接 -> 使得数据库连接先于服务器
引入两个初始化函数,分别在一个函数下,顺序区分调用:
const initDB = require("./init/initDB")
const initServer = require("./init/initServer")
//保证先启动数据库服务,再启动接口服务
const main = async () => {
await initDB()
await initServer(app)//initServer.js中需要用app,所以传入该方法中
}
main()
后端文件夹如下:
至此,完成各方连接以及各模块先后顺序: