说明
- 用过express的都知道express入口文件只有一个app.js,里面写好了很多路由配置,通常情况下,会有一个routes文件夹,用来对对应路由规则的数据进行处理,响应请求,而不是将所有的功能写在app.js文件中,类似下图结构:
问题
- 在学习koa2时,几乎没有人提到怎么将不同路由规则的处理逻辑分开,网上的教程只是(截至目前)讲怎么获取get,post等,这里给大家介绍如何实现koa的类似文件结构,便于项目的维护和更加直观的分辨项目结构关系。结果如下图:
入口文件:index.js可自行定义名字,不多说。
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa()
const bodyParser = require('koa-bodyparser');
const router = new Router();
const session = require('koa-session');
const cors = require('koa2-cors');
const userlogin=require('./routes/userlogin')
const registerNewUser=require('./routes/registerNewUser')
app.use(session(app))
app.use(bodyParser({
enableTypes:['json','text','form']
}))
app.use(cors({
origin: 'http://localhost:3000',
exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
maxAge: 5,
credentials: true,
allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
}));
router.post('/userlogin',userlogin)
router.post('/registerNewUser',registerNewUser)
// router.get('/post', ctx => {
// ctx.body = ctx.request.body
// })
app.use(async (ctx, next) => {
console.log(ctx.request.path+':'+ctx.request.method);
await next();
});
app
.use(router.routes())
.use(router.allowedMethods())
server.listen(3007)
子路由文件registerNewUser.js export一个函数(在express中使用的是module.exports=router)
module.exports=(ctx,next)=>{
let registerUser=ctx.request.body.userInfo
console.log(registerUser)
if(registerUser.new_password==registerUser.new_password1){
ctx.body={registerState:'success',msg:'注册成功'};
}else{
ctx.body={registerState:'error',msg:'注册失败,两次密码不对应'}
}
next()
}
同样的,子路由文件userlogin.js export一个函数
module.exports= async function userlogin(ctx,next) {
let loginUser=ctx.request.body.userInfo
const users=[
]
let userMatched={};
for(let index in users){
if(users[index].username==loginUser.username){
userMatched=users[index]
}
}
if(userMatched.password==loginUser.password){
ctx.body={loginState:'success',msg:'登陆成功',user:userMatched};
}else{
ctx.body={loginState:'error',msg:'用户名或密码错误'}
}
next()
}
是不是很简单。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。