使用Golang搭建WEB后端服务,从类型上看需要提供两种类型的请求响应服务,一是提供API请求服务,二是提供给前端对静态资源的访问。静态资源包含网页中用到的图片、js脚本和css样式文件。如在网页中引用的js文件,在网页解析时会向后端请求该js文件,后端必须有相应的服务来返回js文件到前端。
后端目录结构
static内包含两个静态资源文件夹 js 、css
首页 index.html
<!doctype html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="Web site created using create-react-app" />
<title>My App</title>
<script defer="defer" src="/static/js/main.c2c1cea9.js"></script>
<link href="/static/css/main.ec1cd5c0.css" rel="stylesheet">
</head>
<body>
<div id="root" style="height:100%"></div>
</body>
</html>
后端WEB服务
package main
import (
"demo/db"
"demo/handler"
"fmt"
"log"
"net/http"
"time"
"github.com/gorilla/mux"
)
func StaticServer(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "./"+r.URL.Path)
}
func main() {
router := mux.NewRouter()
//当前端访问:http://127.0.0.1:8000/ 地址时返回当前目录下的 index.html
router.HandleFunc("/", StaticServer)
//当前端访问路径前缀为 /static/js/ 时返回访问地址指向的js文件内容
//当网页解析到 <script defer="defer" src="/static/js/main.c2c1cea9.js"></script> 时会执行
router.PathPrefix("/static/js/").HandlerFunc(StaticServer)
//当前端访问路径前缀为 /static/css/ 时返回访问地址指向的css文件内容
router.PathPrefix("/static/css/").HandlerFunc(StaticServer)
srv := &http.Server{
Handler: router,
Addr: "127.0.0.1:8000",
WriteTimeout: 15 * time.Second,
ReadTimeout: 15 * time.Second,
}
log.Fatal(srv.ListenAndServe())
}