协同开发巧用gitignore中间件避免网络请求携带登录信息

目录
  • 协同开发时本地测试
  • GoFrame如何优雅的获得方法名
  • 巧用中间件
    • 中间件在登录之后设置关键信息到context上下文中
    • 业务逻辑直接通过context直接取值
  • case when
  • 总结

协同开发时本地测试

昨天的文章中提到了Go如何优雅的进行本地测试,今天分享一下:在多人协同开发中,如果大家都进行本地测试可能会出现的问题。

最大的问题就是git合并的问题,大家都改这个test文件,就会导致有冲突。

我们可以通过把test文件加到.gitignore中来解决这个问题。

比如,我的测试文件所在目录是:app/system/script/test.go。 我就在.gitignore中添加:

app/system/script/test.go

这样我们就不用浪费时间在解决git冲突上了。

GoFrame如何优雅的获得方法名

今天又发现一个优雅的记录错误日志的神器:runtime.Caller(0)

我们可以通过这个命令动态获取对应的方法,从而灵活的记录错误日志,方便跟踪定位问题。

示例如下:

shared.ApiLog()中第三个参数就是动态获取的方法名。

//上下架
func (s *goodsService) Shelves(req *goods_unify.DoShelvesReq, r *ghttp.Request) (err error) {
   defer func() {
      if err != nil {
         funcName, _, _, _ := runtime.Caller(0)
         shared.ApiLog(r, "error/client_server_goods", runtime.FuncForPC(funcName).Name(), err.Error())
      }
   }()
   err = service.GoodsUnify.DoShelves(r.Context(), req)
   if err != nil {
      return
   }
   return
}

巧用中间件

比如在登录之后将登录信息写到上下文中,避免每次请求都携带登录信息。

中间件在登录之后设置关键信息到context上下文中

package middileware
const (
   CtxAppKey         = "AK"
   CtxAppID          = "app_id"
   CtxChannel        = "channel_id"
)
var Middleware = middlewareShared{}
type middlewareShared struct {
}
func (s *middlewareShared) Sign(r *ghttp.Request) {
   code = checkSignV2(r)
   r.Middleware.Next()
}
func checkSignV2(r *ghttp.Request) (code tools.Code) {
   code, appKey, applicationInfo, sign, parmas := getSignv2Params(r)
   if 1 != code.Code {
      return
   }
   bodyBytes, err := ioutil.ReadAll(r.Request.Body)
   if nil != err {
      code = code.UnKnow()
      return
   }
   r.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes)) // 关键点
   signRight, signParam := createSignV2(applicationInfo.Data.SecretKey, parmas, string(bodyBytes))
   if signRight != sign {
      code = code.SignErr("算法错误")
      return
   }
   r.SetParam("appKey", appKey)
   r.SetParam("appId", applicationInfo.Data.Id)
   r.SetCtxVar(CtxAppID, applicationInfo.Data.Id)
   r.SetCtxVar(CtxChannel, applicationInfo.Data.ChannelId)
   return
}

业务逻辑直接通过context直接取值

通过r.Context().Value()获取数据:

//校验请求方权限
func checkLevel(r *ghttp.Request) (err error) {
   if gconv.Int(r.Context().Value(middileware.CtxChannel)) !=10 {
      err = errors.New("没有权限")
      return
   }
   return
}

case when

当需要批量更新数据库时,case when是个不错的选择,我再深入了解一下用法,后面单独出一篇介绍 case when的文章。

总结

这篇文章总结了在协同开发中,可以把我们的调试文件添加到gitignore中,避免和其他同时因为调试文件而冲突,节省解决冲突的时间。

通过GoFrame的runtime.Caller(0)获取方法名。

巧用中间件,避免请求中携带登录信息。

更多关于gitignore避免网络请求携带登录信息的资料请关注我们其它相关文章!

(0)

相关推荐

  • Git配置.gitignore文件忽略被指定的文件上传

    在项目的根目录下建立一个.gitignore的文件(和.git文件同级) .gitignore文件用记事本打开,输入如下内容: ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-

  • 关于idea的gitignore文件编写及解决ignore文件不生效问题

    1.下载idea的 <.ignore> 插件,重启idea生效 2.添加自己想要忽略的文件夹及文件,一般选这个就够了 3.如果想要忽略提交的文件夹名称变成黄色了,就代表成功忽略该文件夹了! 4.一般要忽略的文件夹的.ignore文件的书写格式: .idea -- .idea整个文件夹,要注意的是这个是相对路径,也就是.ignore文件和.idea文件夹同一级目录 *.iws -- 所有以.iws为文件后缀名的文件,下面两个以此类推 *.iml *.ipr PS:若该操作未能实现忽略提交,是因为

  • Mac PyCharm中的.gitignore 安装设置教程

    gitignore是什么文件 就是git软件要忽略的文件列表,如果要忽略某些文件,,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 1. 首先安装.ignore 点击 PyCharm >>> Preferences 点击Plugins >>> 在搜索框输入.ignore >>> 然后安装就OK了. 我这里已经安装了 显示的是卸载 没有安装会显示Install . 安装完成以后 点

  • 详解git中配置的.gitignore不生效的解决办法

    详解git中配置的.gitignore不生效的解决办法 前言: 通常我们希望放进仓库的代码保持纯净,即不要包含项目开发工具生成的文件,或者项目编译后的临时文件.但是,当我们使用git status查看工作区状态的时候,总会提示一些文件未被track.于是,我们想让git帮助我们忽略这些文件,不再提醒. 庆幸的是,git已经考虑到这点了.我们可以在项目的根目录下建立一个.gitignore的文件,该文件用来配置哪些文件或者目录不被track的.规则很简单,就在该文件中,写下你不想被track的文件

  • git设置忽略文件.gitignore的方法

    在仓库目录下新建一个名为.gitignore的文件(因为是点开头,没有文件名,没办法直接在windows目录下直接创建,必须通过右键Git Bash,按照linux的方式来新建.gitignore文件).如下图所示. .gitignore文件对其所在的目录及所在目录的全部子目录均有效.通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则. 以下涉及的ignore文件均为如下格式: # 以'#'开始的行,被视为注释. # 忽略掉所有文件名是 foo.txt

  • 协同开发巧用gitignore中间件避免网络请求携带登录信息

    目录 协同开发时本地测试 GoFrame如何优雅的获得方法名 巧用中间件 中间件在登录之后设置关键信息到context上下文中 业务逻辑直接通过context直接取值 case when 总结 协同开发时本地测试 昨天的文章中提到了Go如何优雅的进行本地测试,今天分享一下:在多人协同开发中,如果大家都进行本地测试可能会出现的问题. 最大的问题就是git合并的问题,大家都改这个test文件,就会导致有冲突. 我们可以通过把test文件加到.gitignore中来解决这个问题. 比如,我的测试文件所

  • iOS开发中使用NSURLConnection类处理网络请求的方法

    NSURLConnection 作为 Core Foundation / CFNetwork 框架的 API 之上的一个抽象,在 2003 年,随着第一版的 Safari 的发布就发布了.NSURLConnection 这个名字,实际上是指代的 Foundation 框架的 URL 加载系统中一系列有关联的组件:NSURLRequest.NSURLResponse.NSURLProtocol. NSURLCache. NSHTTPCookieStorage.NSURLCredentialStor

  • Android网络请求框架Retrofit详解

    介绍: Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求.本文使用Retrofit2.0.0版本进行实例演示. 使用Retrofit可以进行GET,POST,PUT,DELETE等请求方式. 同步请求:需要在子线程中完成,会阻塞主线程. Response response = call.execute().body(); 异步请求:请

  • PHP实现网络请求的方法总结

    一.分析php发送网网络请求的方法 对于php发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_contents只能完成一些间单的网络请求,稍复杂的就无法完成,例如文件上传,cookies,验证,表单提交等,用php的curl可以使用URL的语法模拟浏览器来传输数据,因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及

  • IOS开发中异步网络请求上实现同步逻辑

    IOS开发中异步网络请求上实现同步逻辑 前提: 可能遇到一些问题,比如上传多个数据,需要等多个数据上传成功后做一定的处理,而且一个个上传,万一哪个上传失败了,后面就不需要上传了,直接报错. 之前ASI的网络库中是有同步请求的接口,所以很好处理,AFNetwork的网络库只有异步的网络请求,该怎么实现呢? 1.循环异步拼组 - (void)uploadFile:(NSArray *)imageArray atIndex:(NSInteger)index imagesCount:(NSInteger

  • iOS开发中不合法的网络请求地址如何解决

    NSString *const kWebsite = @http://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fr=&sf=1&fmq=1459502303089_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&

  • Android开发中的几种网络请求方式详解

    Android应用经常会和服务器端交互,这就需要手机客户端发送网络请求,下面介绍四种常用网络请求方式,我这边是通过Android单元测试来完成这四种方法的,还不清楚Android的单元测试的同学们请看Android开发技巧总结中的Android单元测试的步骤一文. Java.NET包中的HttpURLConnection类 Get方式: // Get方式请求 public static void requestByGet() throws Exception { String path = "h

  • nodejs开发——express路由与中间件

    路由 通常HTTP URL的格式是这样的: http://host[:port][path] http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Resource Identifier,统一资源定位符),如果URL中没有给出path,一般会默认成"/"(通常由浏览器或其它HTTP客户端完成补充上). 所谓路由,就是如何处理HTTP请求中的路径部分.比如"http://xxx.com/users/

  • 详解Android Studio中Git的配置及协同开发

    一. Android Stutio配置git setting–>Version Control–>Git–>Path to Git executable中选择git.exe的位置,这个Stutio一般会默认配置好: 配置完路径后点击后面的Test按钮,出现下面提示框则表示配置成功: 二. 将项目分享到github 1. 设置github账号密码 打开Setting–>Version Control–>GitHub,填写完账号密码后,点击Test测试,如果连接成功会弹出如下提示

  • Git多人协同开发紧急修复线上bug操作指南

    目录 使用场景 解决思路 操作流程 附录:Git使用的小技巧 Git命令别名 总结 使用场景 团队协同开发时,生产环境出现bug,需要紧急修复. 每位同学在本地开发,对应本地的dev分支,本地测试通过后提交到测试环境的dev分支. 测试环境有其他同学提交的代码,正在测试中,无法提交到生产环境的master分支. 以上情况导致我们不能在本地基于dev分支修复bug,因为会和其他同学提交的测试中的代码“撞车”,导致无法及时提及到生产环境. 这个时候如何正确使用Git管理代码呢? 解决思路 首先我们从

随机推荐