golang 实现一个博客的后端服务器

golang实现一个博客的后端服务器

一、简介

这篇文章写的是一个简单博客后端的实现过程,完整代码在github上。
我在这次项目中负责的部分是

  • 利用swagger editor生成api文档
  • 服务端部署
  • 完成user和article的全部功能
二、安装mongodb、gin、mgo

ubuntu mongodb安装和使用
https://www.cnblogs.com/weihu/p/8570083.html

mongo service 的开启和关闭
开启 sudo service mongodb start
关闭 sudo service mongodb stop
重启 sudo service mongodb restart

gin的安装
https://www.cnblogs.com/woodx/p/14130891.html
gin的使用实例
https://github.com/gin-gonic/gin

golang mgo的使用
https://segmentfault.com/a/1190000020980642?utm_source=tag-newest

三、逐步实现api中的功能

这次项目我们采取前后端分离的方式,前端和后端都根据api来展开实现。
我们的api通过swagger editor生成,主要包括user、article、like、comment四个部分,接下来以user的实现为例,具体请看仓库中的代码。

user有以下api
在这里插入图片描述

在main.go中对应着以下路由

	//开启服务器
	r := gin.Default()
	
	user := r.Group("/user")
	{
		user.POST("/register", App.RegisterUser)

		user.POST("/login",  App.LoginUser)

		user.GET("/username/:username", App.GetUserByUsername)

		user.GET("/uid/:uid", App.GetUserByUid)

		user.PUT("/:uid", App.ModifyUserByUid)
	}

在App的user.go中定义了关于用户的数据结构

type User struct {
	Id string   `bson:"_id"`
	Username string	  `bson:"username"`
	Email string	`bson:"email"`
	Password string		`bson:"password"`
	Phone string	`bson:"phone"`
	UserStatus UserStatus  `bson:"userStatus"`
}

以及关于用户的操作,比如登录操作

//用户登陆
func LoginUser (c *gin.Context) {
	//解析post的数据存到postUser内
	con,_ := ioutil.ReadAll(c.Request.Body) //获取post的数据
	postUser := User{}
	json.Unmarshal(con, &postUser)

	//检查用户名和密码是否匹配
	tmpUser := User{}
	MyuserModel.DB.Find(bson.M{"username": postUser.Username, "password": postUser.Password}).One(&tmpUser)
	hexid := fmt.Sprintf("%x", string(tmpUser.Id))
	if (hexid == "") {
		c.JSON(http.StatusOK, &ApiResponse {
			Code: 400,
			Type: "fail",
			Message:  "username and password do not match",
		})
	} else {
		c.JSON(http.StatusOK, &ApiResponse {
			Code: 200,
			Type: "success",
			Message:  &ObjectID {
				Id: hexid,
			},
		})
	}
}

这个函数很简单,接收用户传来的用户名和密码,检查与数据库是否匹配,如果匹配则响应一个json报文,其中包含登录后的用户id,如果不匹配则返回400。

数据库的连接方法如下:

func initDB() {
	session, err := mgo.Dial(url) 
	if (err != nil) {
		panic(err)
	}
	session.SetMode(mgo.Monotonic, true)
	App.MyuserModel = &App.UserModel {
		DB: session.DB("myblog").C("user"),
	}
}

完成这些以后将main函数运行起来,在9999端口监听,然后用postman测试(注意要先注册用户)
在这里插入图片描述

四、总结

经过这次作业,我学会了从零开始创建一个服务器,gin框架非常方便,配合REST风格的api很是舒服;mongodb是一个轻量级的数据库,golang社区提供的mgo可以很方便地用来操作它。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值