EggJs框架日记(一):项目初始化及使用TypeScript开发

  • 2021年5月14日
  • 技术

第一次尝试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',
  };

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注