!!!有脚手架
搞完才发现好像有脚手架呢,不过还没了解过,先放这里了
pnpm install -g koa-generator
参考
- koa基础配置:https://juejin.cn/post/6844903509351989255
- 路由拆分:https://blog.csdn.net/u010730897/article/details/81741355
项目结构
- lib文件夹:数据库相关文件
- config.js:数据库配置
- mysql.js:数据库操作
- router:路由
- index.js
- router1.js
- router2.js
- …
- static:静态资源,存放前端被访问的文件
- app.js:项目入口
路由拆分
- 在路由拆分的过程中,尝试过使用同一个路由,就是说app只渲染一个路由,但是不行,即使都是从index.js中引出来的,到最后也不知道是为什么被拆分了
- 因此下面的思路是,在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
- 这里要注意一个问题,以下这里是内容是适用于window的,注意在split的时候我是用“\”来进行分割,这是在我开发阶段时候的分割方式,因为它是这么显示的
- 但是在部署到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端口启动成功")
})