egg.js的使用,包括项目的创建、内置ctx对象、路由、controller控制层、post请求。

1、创建/启动项目

直接使用下面的方式,无法创建项目

1
2
3
4
5
6
7
// 无法创建项目
npm init egg --type=simple

// 需要在后面指定淘宝源
npm init egg --type=simple -r=https://registry.npm.taobao.org

npm run dev

2、内置的ctx对象

ctx这个对象非常重要,请求来的参数,返回去的消息都需要通过ctx这个对象获取或者设置

ctx是继承koa的context对象通过设置ctx.body, 可以改变返回信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
ctx { request: 
{ method: 'GET',
url: '/',
header:
{ host: '127.0.0.1:7001',
connection: 'keep-alive',
pragma: 'no-cache',
'cache-control': 'no-cache',
'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="97", "Chromium";v="97"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'sec-fetch-site': 'none',
'sec-fetch-mode': 'navigate',
'sec-fetch-user': '?1',
'sec-fetch-dest': 'document',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
cookie: 'csrfToken=DpyybUjAh9JRzrCgx3itQifi' } },
response: { status: 404, message: 'Not Found', header: {} },
app:
{ env: 'local',
name: 'eggjs',
baseDir: '/Users/yq/Desktop/express',
subdomainOffset: 2,
config: '<egg config>',
controller: '<egg controller>',
httpclient: '<egg httpclient>',
loggers: '<egg loggers>',
middlewares: '<egg middlewares>',
router: '<egg router>',
serviceClasses: '<egg serviceClasses>' },
originalUrl: '/',
req: '<original node req>',
res: '<original node res>',
socket: '<original node socket>' }

3、路由

在controller的home.js中写一个新的路由,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
async list(){
const { ctx } = this
ctx.body = {
code:200,
data:[
{
id:'1',
name:'jude'
},
{
id:'2',
name:'summer'
}
],
msg:'success'
}
}

在router.js中匹配新写的路由

1
router.get('/list',controller.home.list)

打开127.0.0.1:7001/list即可看到效果

4、Controller控制层

在controller新建一个user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
'use strict'

const Controller = require('egg').Controller

class UserController extends Controller {
async info(){
const {ctx} = this
ctx.body = {
code:200,
data:{
id:'1',
name:"jude"
age:29,
gender:"man"
}
msg::"success"
}
}
}

module.exports = UserController

配置新的路由

1
router.get('/user/info',controller.user.info)

打开127.0.0.1:7001/user/info 即可看到效果

5、post请求及配置CSRF跨域

安装跨域插件

1
npm install egg-cors --save

配置config下的plugin.js和config.default.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// plugin.js
moduel.exports = {
cors:{
enable:true,
package:'egg-cors'
}
}

// config.default.js
config.security = {
csrf:{
enable:true
},
domainWhiteList:[]
}
config.cors = {
origin:"*",
allowMethods:'GET,PUT,POST,DELETE.PATCH'
}

6、创建post请求

1
2
3
4
5
6
7
8
9
10
11
12
13
// user.js
async createUser(){
const {ctx } = this
const result = {
username:ctx.request.body.username,
age:ctx.request.body.age
}
ctx.body = {
code:200,
data:result,
msg:'success'
}
}

此时,打开ApiPost工具,选择post请求,输入请求地址+参数信息,即可看到响应信息。