Searching...

[TOC]

配置引入

由于bootrouter包使用了init包初始化方式来进行相关配置,因此我们需要使用:

import _ "PATH"

方式来引入。

需要注意,由于Goimport是存在先后顺序的,往往需要将这两个包置于所有业务包的最上方引入。

main包

每个项目至少存在一个package main,用于程序的入口执行。

/main.go

package main

import (
	_ "github.com/gogf/gf-demos/boot"
  _ "github.com/gogf/gf-demos/router"
  
	"github.com/gogf/gf/frame/g"
)

func main() {
	g.Server().Run()
}

需要非常注意:boot包的引入往往需要在main包中的最顶层位置,以保证应用的初始化最开始进行。特别是一些单例对象的初始化/配置管理操作往往放在boot包中,这样其他包才能正常使用到这些单例对象。

这里建议引入boot包、router包和其他包之间加入一个空行以作区分,特别是Goland IDE的import插件不会将引入包进行自动排序。

编译运行

我们可以使用IDE执行运行,也可以使用以下命令编译运行。

$ go build main.go
$ ./main

执行后,终端输出的路由表如下:

  SERVER  | DOMAIN  | ADDRESS | METHOD |        ROUTE        |                              HANDLER                              |           MIDDLEWARE             
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/checknickname | github.com/gogf/gf-demos/app/api/user.(*Controller).CheckNickName | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/checkpassport | github.com/gogf/gf-demos/app/api/user.(*Controller).CheckPassport | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/issignedin    | github.com/gogf/gf-demos/app/api/user.(*Controller).IsSignedIn    | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/profile       | github.com/gogf/gf-demos/app/api/user.(*Controller).Profile       | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/profile       | github.com/gogf/gf-demos/app/api/user.(*Controller).Profile       | middleware.CORS,middleware.Auth  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/signin        | github.com/gogf/gf-demos/app/api/user.(*Controller).SignIn        | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/signout       | github.com/gogf/gf-demos/app/api/user.(*Controller).SignOut       | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|
  default | default | :8199   | ALL    | /user/signup        | github.com/gogf/gf-demos/app/api/user.(*Controller).SignUp        | middleware.CORS                  
|---------|---------|---------|--------|---------------------|-------------------------------------------------------------------|---------------------------------|

接口测试

我们通过curl命令来对其中两个接口执行简单的测试。

1. 用户注册 - /user/signup

注册一个账号test001,昵称为john,密码为123456

curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/signup
{"data":null,"code":0,"message":"ok"}

我们再次使用刚才的信息注册一次试试。

curl -d 'nickname=john&passport=test001&password=123456&password2=123456' http://127.0.0.1:8199/user/signup
{"data":null,"code":1,"message":"账号 test001 已经存在"}

可以看到注册失败了,相同名称只能注册一个账号。

2.用户登录 - /user/signin

我们先访问获取用户信息的接口,验证鉴权中间件是否生效。

curl http://127.0.0.1:8199/user/profile
Forbidden

我们用刚才注册的账号登录。

curl -i -d 'passport=test001&password=123456' http://127.0.0.1:8199/user/signin
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,Content-Type,Accept,User-Agent,Cookie,Authorization,X-Auth-Token,X-Requested-With
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,PATCH,HEAD,CONNECT,OPTIONS,TRACE
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3628800
Content-Type: application/json
Server: gf-demos
Set-Cookie: gfsessionid=BZT1SP2OX980EHALYV; Path=/; Expires=Sun, 10 Jan 2021 14:56:36 GMT
Date: Sat, 11 Jan 2020 14:56:36 GMT
Content-Length: 37

{"code":0,"message":"ok","data":null}

我们这里使用了-i选项用于终端打印出服务端返回的Header信息,目的是为了获取sessionidGF框架默认的sessionid名称为gfsessionid,我们看到返回的Header中已经有了,并且是通过Cookie方式返回的。

随后我们再次访问获取用户信息接口,并且这次提交gfsessionid,该信息可以通过Header也可以通过Cookie提交,服务端都是能够自动识别的。

curl -H 'gfsessionid:BZT1SP2OX980EHALYV' http://127.0.0.1:8199/user/profile
{"code":0,"message":"","data":{"id":1,"passport":"test001","password":"123456","nickname":"john","create_time":"2020-01-10 23:51:41"}}