用egg快速搭建service项目

124 阅读1分钟

关于egg是什么,这里就不做讲述了, 官网讲的应该是比较清楚的, 可以移步去 egg官网

项目搭建

快速初始化

type可以快速选择创建的模版

mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i

启动项目

npm run dev

浏览器访问<http://127.0.0.1:7002>

目录结构

├── README.md
├── app
|  ├── controller
|  |  └── home.js
|  └── router.js
├── config
|  ├── config.default.js
|  └── plugin.js
├── package.json
└── test
   └── app
      └── controller

基础能力

get请求

参数

正常前端在发送get请求比如:‘http://127.0.0.1:7002/?user=admin&&id=46546’时, egg服务端如何接受呢?

1. router

首先我们需要在路由里面定义一个这样请求/接口, 并在命中时执行controller中对应的响应

module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
};

2. controller

然后我们在controller中编辑我们的响应, 将接收到的参数返回

const { Controller } = require('egg');

class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    const query = ctx.query;
    ctx.body = query;
  }
}

module.exports = HomeController;

3. 浏览器访问

动态参数

有时我们在获取数据时会通过类似‘http://127.0.0.1:7002/user/45’ 的方式将userid 传递过去, 此时egg如何接受呢?

相同的步骤, 我们先定义路由

1. router

module.exports = app => {
  ...
  router.get('/user/:id', controller.home.user);
  ...
};

2. controller

class HomeController extends Controller {
  ...
  async user() {
    const { ctx } = this;
    const { id } = ctx.params;
    ctx.body = id;
  }
  ...
}

3. 浏览器访问

post请求

首先还是先定义一个post请求的router

router

module.exports = app => {
  ...
  router.post('/user/add', controller.home.add);
  ...
};

controller

然后定义执行的controller

class HomeController extends Controller {
  ...
  async add() {
    const { ctx } = this;
    console.log(ctx.request);
    const { name, pwd } = ctx.request.body;
    ctx.body = {
      name, pwd,
    };
  }
  ...
}

针对post请求, egg内置了 bodyParser 中间件来对post提交的json、form两类格式请求的body体进行解析成 object 挂载到 ctx.request.body 上。

postmain 调用

error解决

直接请求会报错 安全威胁 csrf 的防范

前往config/config.default.js做好白名单配置

config.security = {
    csrf: {
      enable: false,
      ignoreJSON: true,
    },
    domainWhiteList: [ '*' ], // 配置白名单, *全部放开
  };

下一篇:egg链接数据库并实现基础的增、删、改、查 - 掘金 (juejin.cn)