koa开发基础配置

本文介绍了在使用Koa框架构建Node.js应用时,如何通过路由拆分管理和数据库配置,包括MySQL连接池的创建,以及如何动态加载路由文件。重点在于index.js中处理文件路径和引入其他路由模块的方法。
摘要由CSDN通过智能技术生成

!!!有脚手架

搞完才发现好像有脚手架呢,不过还没了解过,先放这里了

pnpm install -g koa-generator

参考

  1. koa基础配置:https://juejin.cn/post/6844903509351989255
  2. 路由拆分:https://blog.csdn.net/u010730897/article/details/81741355

项目结构

  1. lib文件夹:数据库相关文件
    1. config.js:数据库配置
    2. mysql.js:数据库操作
  2. router:路由
    1. index.js
    2. router1.js
    3. router2.js
  3. static:静态资源,存放前端被访问的文件
  4. app.js:项目入口

路由拆分

  1. 在路由拆分的过程中,尝试过使用同一个路由,就是说app只渲染一个路由,但是不行,即使都是从index.js中引出来的,到最后也不知道是为什么被拆分了
  2. 因此下面的思路是,在index.js中读取同文件夹其他路由的router,并进行统一的渲染

config.js

// 数据库配置
const config = {
  port: 3000,
  database:{
    DATABASE:'***',   //数据库
    USERNAME:'***',    //用户
    PASSWORD:'***',  //密码
    PORT:'3306',    //端口
    HOST:'***'   //网址ip
  }
}


module.exports = config

mysql.js

const mysql = require('mysql2') // mysql2的才支持mysql 8
const config = require('./config')

// 数据库连接池
const pool = mysql.createPool({
    host:config.database.HOST,
    user:config.database.USERNAME,
    password:config.database.PASSWORD,
    database:config.database.DATABASE
});


// 查询函数 查询语句 查询参数数组
const query = function( sql, values ) {

    return new Promise(( resolve, reject ) => {
        pool.getConnection(function(err, connection) {
            if (err) {
                resolve( err )
            } else {
                connection.query(sql, values, (err, rows) => {

                    if ( err ) {
                        reject( err )
                    } else {
                        resolve( rows )
                    }
                    connection.release()
                })
            }
        })
    })

}

// 查询user_info
const findUserInfo = function (value) {
    const  _sql = `SELECT * FROM user_info where userName="${value}"`
    return query(_sql)
}

module.exports={
    findUserInfo,
}

index.js

  1. 这里要注意一个问题,以下这里是内容是适用于window的,注意在split的时候我是用“\”来进行分割,这是在我开发阶段时候的分割方式,因为它是这么显示的
  2. 但是在部署到linux服务器上面的时候,我发现打印出来的分割方式是“/”,所以分割符号也是要相应更换的
const glob = require('glob') // 文件路径读取

const registerRouter = (app) => { // 路由注册
    glob.sync('./routers/**/*.js') // 相对路径
        .filter(value => value.indexOf('index.js') === -1) // 去掉index.js
        .forEach(value => {
            // linux下面要更换分割符号
            // const router = require(`./${value.split('/')[1]}`)
            const router = require(`./${value.split('\\')[1]}`) // 路由引入
            app.use(router.routes()) // 路由注册
            .use(router.allowedMethods());
        })
}

module.exports = registerRouter

router1.js(随便叫什么名字都行)

const userModel = require('../lib/mysql')   //数据库方法
const router = require('koa-router')()   //路由

// 商品加入购物车
router.post('/addToCart', async (ctx, next) => {
    let flag = false
    // ctx.request.body里面就是前端传过来的东西
    await userModel.addUserCargo(ctx.request.body).then(
        res => {
            flag = true
        },
        err => {
            console.log('err->', err);
        }
    )
    // 返回数据类型
    ctx.type = 'application/json';
    if(flag){
        // ctx.body就是你要返回的东西
        ctx.body = {
            code: 200,
            msg: '商品已加入购物车'
        };
    }
    else {
        ctx.body = {
            code: 400,
            msg: '商品加入购物车失败'
        };
    }

})

// 路由导出 以供index.js引用
module.exports = router

app.js

const Koa = require('koa')
const bodyParser  = require('koa-bodyparser')   //上下文解析

const static = require('koa-static')    //静态资源服务
const path = require('path')
const cors = require('koa-cors')       //跨域访问组件
const registerRouter = require('./routers/index')

const app = new Koa()

// 配置静态资源文件 静态资源设置只要一个就够了 不需要再在接口里面进行编写了
const  staticPath = './static'
app.use(static(
    path.join( __dirname, staticPath)
))

// 允许跨域访问
app.use(cors())

// body解析
app.use(bodyParser())

registerRouter(app)

app.listen(8633, () => {
    console.log("在8633端口启动成功")
})


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值