01-blog-环境与服务器搭建

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

博客系统----掌握react+node配合开发

流程:后端------接口文档------前端

image.png

1. mysql数据库--安装

安装mysql花费了我将近两个多小时的时间,差一点就去tb花重金了...还好在哦我的坚持不懈下,成功安装并修改了密码,创建了数据库blog!!!

image.png

image.png

image.png

对了,我修改了两次的mysql密码是Admin2022,记载。

2. 搭建服务

image.png

在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()

变量已经声明成功,接下来就是将数据库连接与服务器连接模块化开发(分离开)

数据库的连接:

  1. 构造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//导出
  1. 定义连接数据库的函数
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//导出
  1. 初始化函数
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

服务器连接:

  1. 初始化服务器连接
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()

后端文件夹如下:

image.png

至此,完成各方连接以及各模块先后顺序:

image.png