关于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: [ '*' ], // 配置白名单, *全部放开
};