(四)express的正式开发

这里要说明一下就是在使用的时候,前面说过了node的执行的时候,只执行一次,后边是就是使用缓存了,所以的新建组件的时候,就按照这种的执行顺序,来进行使用。

express连接数据库

1.首先新建连接数据库的配置文件,新建conf的文件夹,新建db.js文件

const env = process.env.NODE_ENV  // 环境参数

// 配置
let MYSQL_CONF
let REDIS_CONF

if (env === 'dev') {
    // mysql
    MYSQL_CONF = {
        host: 'localhost',
        user: 'root',
        password: '123456',
        port: '3306',
        database: 'myblog',
        dateStrings : true
    }

    // redis
    REDIS_CONF = {
        port: 6379,
        host: '127.0.0.1'
    }
}

if (env === 'production') {
   
}

module.exports = {
    MYSQL_CONF,
    REDIS_CONF
}

连接数据库,执行文件

新建db文件夹,新建mysql.js的文件
引用数据库的对象,同时引用数据库的配置文件
创建数据库的对象 进行连接
创建sql的执行函数 创建一个promise的,暴露出来

const mysql = require('mysql')
const { MYSQL_CONF } = require('../conf/db')

// 创建链接对象
const con = mysql.createConnection(MYSQL_CONF)

// 开始链接
con.connect()

// 统一执行 sql 的函数
function exec(sql) {
    const promise = new Promise((resolve, reject) => {
        con.query(sql, (err, result) => {
            if (err) {
                reject(err)
                return
            }
            resolve(result)
        })
    })
    return promise
}
//escape: mysql.escape 是MySQL的sql的注入
module.exports = {
    exec,
    escape: mysql.escape
}

2 新建路由的文件,根据业务逻辑进行新建路由文件,

路由文件新建在routes里面
新建的路由的对象,需要在app.js里面进行注册
app.js

var indexRouter= require('./routes/index')
app.use('/api',indexRouter)
var express = require('express')
var router = express.Router();

//使用router对象进行路由书写
router.post('/login',function(req,res,next){
	//获取post的参数
	const {username,password} = req.body
    //引入处理逻辑进行使用
})
router.get('/login',function(req,res,next){
	//获取get的参数
	const {username,password} = req.query
    //引入处理逻辑进行使用

})

module.exports = router;

router里面可以传入多个中间件,比如一些处理之前的需要判断是否登录的,需要写成公共的中间件的,可以直接传入进去使用

处理逻辑,接口收到参数需要进行逻辑操作,操作数据库,所以新建controller进行操作,
新建controller文件夹
可以按照逻辑的来分为操作的文件
例如 新建文件index.js

const {exec} = require('../db/mysql')

//获取列表信息的逻辑
const getList = (id)=>{
    let sql = `select * from blogs where 1=1 `
    if (id) {
        sql += `and author='${author}' `
    }
    sql += `order by createtime desc;`
    // exec返回 promise,不进行结果接收,将对象直接返回上去
    return exec(sql)
}
//这个是直接返回结果的,接收promise 直接返回结果
const delBlog = (id, author) => {
    // id 就是要删除博客的 id
    const sql = `delete from blogs where id='${id}' and author='${author}';`
    return exec(sql).then(delData => {
        // console.log('delData is ', delData)
        if (delData.affectedRows > 0) {
            return true
        }
        return false
    })
}
module.exports = {
    getList,
    delBlog,
}
posted @ 2022-03-29 15:13  无梦南柯  阅读(39)  评论(0编辑  收藏  举报