1、初始化项目
npm init
2、安装koa依赖
npm i koa
3、安装koa-router(根据需求看是否需要使用koa-router)
npm i koa-router
4、搭建简单的本地服务(全局app.js简单书写)
const koa = require('koa')
const router=new Router()
const app=new koa()
app.use(router.routes())
router.get('/',(ctx,next)=>{
ctx.body='hello world'
})
//匹配出现路由出现的东西
app.listen(3000,()=>{
console.log(`server is started at port 3000`)
})
//监听一个3000的端口
5、连接数据库
const CONF = {
port: '5757',
mysql: {
host: 'localhost',
port: 3306,
user: 'root',
db: 'nodemysql',
pass: '123456',
char: 'utf8mb4'
}
}
module.exports = CONF
// 获取基础配置
const configs = require('./config') //导入config模块
// Knex.js是为MySQLd等等,SQL查询构建器,其设计灵活,便于携带并且使用起来非常有趣。
var knex = require('knex') ({//使用knex,连接mysql数据库
client: 'mysql',
connection: {
host: configs.mysql.host,
port: configs.mysql.port,
user: configs.mysql.user,
password: configs.mysql.pass,
database: configs.mysql.db,
}
})
//将基础配置和sdk.config合并 导出初始化完成的sdk sdk(软件开发工具包)
module.exports={mysql:knex}
6、封装组件工作
6.1 - 封装Router组件
const router = require('koa-router')({
prefix:"/lm" //加上路由前缀
})
const controllers =require('../controllers/index')//能读取controllers下所有文件的绝对路径
// //加载路由模块,koa中没有,若用到要重新下载
// const router=new Router() //new Router实例
router.get('/index/index',controllers.home.index)
//从数据库中获取数据返回给前端
// (ctx,next)=>{
// ctx.body='hello world'
//这个箭头函数是往前端输出东西的,所以弄成一个控制器
module.exports=router //模块导出
6.2 - 封装Controllers控制组件
- const {mysql}=require('../../mysql.js')
module.exports=async(ctx)=>{
const banner = await mysql('某个xxx表').where({
//条件
}).select()
//在xxx表中查询是否存在数据
ctx.body={
'banner':banner //往前端抛出banner给前端,使前端能拿到轮播图数据
}
}
/获取各种文件绝对路径的方法
const _ =require('lodash')//lodash js中一个库,在原生的js的基础上做了一个封装,实现模块化,高性能的js工具库
const fs=require('fs')
const path=require('path')
// 映射 d 文件夹下的文件为模块
const mapDir = d => {
const tree = {
}
// 获取当前文件夹下的所有文件夹和文件,分成两组,文件夹一组,文件一组
const [dirs, files] = _(fs.readdirSync(d)).partition(p => fs.statSync(path.join(d, p)).isDirectory())
// 映射文件夹
dirs.forEach(dir => {
tree[dir] = mapDir(path.join(d, dir))
});
// 映射文件
files.forEach(file => {
// 获取文件后缀名字
if (path.extname(file) === '.js') {
tree[path.basename(file, '.js')] = require(path.join(d, file))
}
})
return tree
}
// 默认导出当前文件夹下的映射
module.exports = mapDir(path.join(__dirname)) //path.join(__dirname)是绝对路径