mongoose
链接数据库npm i -S @koa/router
//安装路由// 修改文件:/server/app.js const koa = require('koa'); const Router = require('@koa/router'); //引入NPM包 const router = new Router() // 建立实例 const app = new koa(); app.use((ctx, next) => { ctx.body = '测试测试测试'; //该中间件任什么时候候都会走,GET请求'/'路径时,返回被后续的返回覆盖了,因此,没有展现。 next(); }) router.get('/', (ctx, next) => { //拦截GET访问'/'路径的请求 ctx.body = `访问路径:${ctx.originalUrl}` }); app .use(router.routes()) .use(router.allowedMethods()); // 嵌入中间件 app.on('error', err => { log.error('server error', err) }); module.exports = app;
以nodemon
配置的launch.json
运行node
浏览器输入localhost:3000
和localhost:3000/any
查看输出结果。git
这里但愿将全部的路由配置提取到/server/router
文件中(注意还原/server/app.js
)。github
// 新建文件:/server/control/users.js————预约义处理路由处理函数 async function list (ctx) { ctx.body = 'list' } async function register (ctx) { ctx.body = 'register' } async function login (ctx) { ctx.body = 'login' } async function update (ctx) { ctx.body = 'update' } module.exports = { list, register, login, update }
// 新建文件:/server/router/users.js const Router = require('@koa/router'); const routerUtils = require('../utils/router'); const { list, register, login, update } = require('../control/users'); const router = new Router({ prefix: '/users' //路由前缀,该文件下的路由路径,追加'/users'为前缀 }); // 配置路由 const routes = [ { path: '/', method: 'GET', handle: list }, { path: '/', method: 'POST', handle: login }, { path: '/:id', method: 'PATCH', handle: update }, ]; routerUtils.register.call(router, routes); // 注册路由 module.exports = router; //导出User的路由实例
// 新建文件:/server/utils/router.js function register(routes) { // 转换为'@koa/router'拦截路由的形式:router.get(<path>, <handle>) routes.forEach((route, idx) => { const { path, method, handle } = route; this[method.toLowerCase()](path, async (ctx, next) => { await handle(ctx); }) }) } module.exports = { register, }
// 新建文件:/server/router/index.js const userRouter = require('./users'); // 导出User路由相关的中间件,后续可追加其它的中间件 module.exports = [ userRouter.routes(), userRouter.allowedMethods() ];
// 更新文件:/server/app.js const koa = require('koa'); const routes = require('./router'); const app = new koa(); app.use((ctx, next) => { ctx.body = '测试测试测试'; next(); }) //中间件: 路由 --> 不支持一次性注册多个中间件 // app.use(...router.routes).use(...router.allowedMethods); routes.forEach(route => { app.use(route); }); app.on('error', err => { log.error('server error', err) }); module.exports = app;
@koa/router数据库