第一次尝试NodeJs开发,一直在犹豫用框架还是原生,毕竟是刚开始写原生方便于理解代码思想和NodeJs底层语言熟悉程度,但是还是需要结合工作,效率优先,所以选择了EggJs框架。EggJs的官方文档还算完整,网上的使用教程也不少,写这个算是一个总结,方便于自己以后的回顾。
(1)初始化项目,用的是已经用TypeScript整合好的Egg框架,免去一部分的问题:
git地址:https://github.com/freestyle-swimming/eggjs-typescript-template
部署完成后执行,用于安装依赖的npm包:
npm i
开发环境启动:
npm run dev
框架初始化完成。
(2)接口封装
控制层:
// app/controller/room.ts import { Controller } from 'egg'; export default class RoomController extends Controller { /** * 获取房间列表(get) */ public async list() { const { ctx } = this; ctx.body = await ctx.service.room.list(); } /** * 更新房间状态(post) */ public async update(){ const {ctx} = this; const {room_id} = ctx.request.body; ctx.body = await ctx.service.room.update(ctx.helper.toInt(room_id)); } }
逻辑层:
// app/service/room.ts import { Service } from 'egg'; /** * 房间数据操作封装 */ export default class RoomService extends Service { /** * 获取房间列表 */ public async list() { return [{"id":1,"name":"公共房间1"},{"id":2,"name":"私人房间1"}]; } /** * 修改房间状态 */ public async update(roomId) { return roomId; } }
公共扩展封装:
// app/extend/helper.ts export default { /** * 封装字符串转整型 */ toInt(str) { if (typeof str === 'number') return str; if (!str) return str; return parseInt(str, 10) || 0; } };
路由:
// app/router.ts import {Application} from 'egg'; export default (app: Application) => { const {controller, router} = app; //获取房间列表 router.get('/api/room/list', controller.room.list); //更新房间状态 router.post('/api/room/update', controller.room.update); };
关闭安全插件,根据自己实际情况:
// app/config/config.default.ts里面添加 config.security = { domainWhiteList: [ '0.0.0.0:7001', ], csrf: { enable: false, }, }; config.cors = { credentials: true, allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS', };