• (四)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,
    }
    
  • 相关阅读:
    基础知识漫谈(5):应用面向对象来分析“语言”
    【线段树】BZOJ2752: [HAOI2012]高速公路(road)
    【树状数组】BZOJ3132 上帝造题的七分钟
    【AC自动机】Lougu P3796
    【Splay】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)
    【fhq Treap】bzoj1500(听说此题多码上几遍就能不惧任何平衡树题)
    【可持久化线段树】POJ2104 查询区间第k小值
    【RMQ】洛谷P3379 RMQ求LCA
    【倍增】洛谷P3379 倍增求LCA
    【网络流】POJ1273 Drainage Ditches
  • 原文地址:https://www.cnblogs.com/tcz1018/p/16071944.html
Copyright © 2020-2023  润新知