写前端程序时总是要等后台接口写完再联调,就思考了下能不能用热更新的套路,写一个可以动态创建http接口的后台程序。
不知道这算不算前端写后台的邪修方法。
1.在go工程根目录下创建files文件夹,里边存放接口需要返回的数据json串,保存为.json文件。
2.之后添加的每一个接口,保证url地址最后一个/后的内容和files文件夹下的json文件同名。
3.打开浏览器,在地址栏输入内容:
http://localhost:8080/api/app/testapi?arg=1
http://localhost:8080/api/app/testapi
http://localhost:8080/testapi?arg=1
这几种哪个都可以成功返回files/testapi.json文件内容,这样适配是为了保证前端的测试代码可以和生产代码保持一致。
我用前端写了测试代码,使用Get/Post方法都可以成功返回信息,没有URL参数解析功能,因为文件名不让使用?&等特殊符号。
4.以下为go代码,文件存放目录等可以根据需要自行提取配置。
go
// 配置存放可下载文件路径,如果传参中不包含扩展名,自动添加.json后缀
func SettingDownloadFilePath() {
// 处理所有请求
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
// 获取请求路径
path := r.URL.Path
LogInfo("=================url路径=" + path)
// 如果是根路径,显示欢迎信息或返回404
if path == "/" {
helloHandler(w, r)
return
}
// 获取路径中最后一个斜杠后的字符串(文件名)
fileName := filepath.Base(path)
LogInfo("%s", "========fileName="+fileName)
// 如果文件名中没有扩展名,自动添加 .json 后缀
downloadFileName := fileName
if !strings.Contains(fileName, ".") {
downloadFileName = fileName + ".json"
}
// 构建实际文件路径:files目录下的对应文件
actualFilePath := "./files/" + downloadFileName
// 检查文件是否存在
if _, err := os.Stat(actualFilePath); os.IsNotExist(err) {
http.Error(w, "File not found: "+fileName, http.StatusNotFound)
return
}
// 设置响应头,强制浏览器下载文件
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", downloadFileName))
w.Header().Set("Content-Type", "application/octet-stream")
// 提供文件
http.ServeFile(w, r, actualFilePath)
})
}
// @Summary 根目录测试连接
// @Description
// @Tags tags1
// @Accept json
// @Produce json
// @Router / [get]
func helloHandler(w http.ResponseWriter, r *http.Request) {
LogInfo("访问路径:%s,来源:%s\n", r.URL.Path, r.RemoteAddr)
// 编码 JSON 响应
SendJSONResponse(w, true, http.StatusOK, "成功", "访问了根目录 Hello, World! 👋")
}