项目初始化
// 初始化项目,生成package.json
npm init
指定入口文件 main.js
项目的基础搭建
创建 src 工作目录
创建 main.js 主入口文件
在 main.js 中引入 koa
const koa = require('koa')
const app = new Koa()
app.listen(3000, () => {
// 监听成功的回调
console.log('server is running:http://localhost:3000')
})
node main.js 后即可通过访问 http://localhost:3000,访问到此项目
项目的基本优化
自动重启
// 热更新,只在开发模式下才会用的到
npm install nodemon -D
这时候我们安装的 nodemon 会在 package.json 中的 devDependencies 下
修改 script 选项
"scripts":{
"dev":"nodemon ./src/main.js"
}
使用 nodemon 启动,开发过程中的改动会自动重启
配置文件
我们开发的过程中还需要区分环境,开发、正式、测试等
// 安装dotenv
npm install dotenv -S
在项目的根目录下创建
.env
文件尽可能早的在项目中引入 dotenv 并进行环境变量的配置
const dotenv = require('dotenv')
dotenv.config()
// 经过了上面的配置,我们在.env文件中所配置的环境变量就已经被加载进process.env中了
// 可以将环境变量导出,在需要用到的时候进行引入
module.exports = process.env
这样我们就在项目中配置了环境变量,配置环境变量还有另外一种方式,就是在 package.json 中的 script 中配置执行的命令,并指定环境变量,这样我们就不用新开一个文件在 js 文件中引用了
添加路由
// 这是一个构造函数
const Router = require('koa-router')
const router = new Router({
prefix: '/user' })
router.post('/register', (ctx, next) => {
})
通过引入 koa 的路由中间件 koa-router,我们可以设置项目的路由,通过在构造函数中传入
prefix:'/user'
可以设置路由的前缀,以作为不同功能模块的区分
目录结构的划分
我们在 main.js 中引入了 koa 启动了服务
又在 main.js 中引入了 koa-router 设置了项目的路由
但是随着功能的逐渐增多,项目变大,我们不能把所有的东西都写在 main.js 中,我们需要做功能模块的区分
抽离路由
在 src 目录下新建 router 文件夹,这个文件夹专门存放并管理项目中的路由。
如果需要新增 user 的路由,就新建 user.route.js 文件
如果需要新增 order 的路由,就新建 order.route.js 文件
const Router = require('koa-router') const router = new Router({ prefix: '/order' }) router.post('/add', addOrderController) module.exports = router
新建好了各个功能模块的路由,我们需要一个
index.js
文件来作为路由的总入口文件,它负责引入各个功能模块的路由const Router = require('koa-router') const router = new Router() const fs = require('fs') // 需要使用nodejs的fs模块,来进行文件的读取和引入 fs.readdirSync(__dirname).forEach((file) => { // 读取当前目录下的文件['user.route.js','order.route.js'] if (file !== 'index.js') { const currentFile = require('./' + file) // 注册路由 router.use(currentFile.routes()) } }) module.exports = router
这样我们所有的路由都注册在了
index.js
中的总路由中,我们只需要在main.js
中注册在 app 上,就可以实现路由的功能
const router = require('./router') // 引入index.js可以不用写
app.use(router.routes