Glang+Vue实现RESTful API+前后端分离,Nginx反向代理解决跨域问题(一)

Glang+Vue实现RESTful API+前后端分离,Nginx反向代理解决跨域问题(一)

概念引入

前后端分离架构如下图,后端只负责动态提供数据,而前端存放静态文件,使得后端服务器不必每次都返回一整个HTML页面,节省了时间开销和资源开销,提高了整个网站系统的性能。
  RESTful架构,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。
  REST(Representational State Transfer)翻译为"表现层状态转化",所谓表现层,正如下图中的前端静态文件服务器,在此前端服务器上部署nginx服务,搭建起一个网站前端,使得用户可以通过访问前端服务器网址来浏览前端页面。
  而所谓状态转化,即当用户访问一个网站时,意味着客户端和服务器有一个互动过程。在这个过程中,势必涉及到数据和状态的变化。在前后端分离架构中,前端只提供静态页面,而数据则由后端提供,使得前端呈现出来的数据得以动态变化。
前后端分离示意图

实验准备

实验名称:基于Golang+Vue+Nginx搭建图书管理系统
实验环境:两台Centos7虚拟机
  1、后端:node1,ip:192.168.141.53
  2、前端:node2,ip:192.168.141.69

实验步骤

1、node1安装go,配置好环境变量。

[root@node1 ~]# wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
[root@node1 ~]# tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz
[root@node1 ~]# rm -f go1.14.linux-amd64.tar.gz
[root@node1 ~]# mkdir -p /home/gopath
[root@node1 ~]# vim /etc/profile
#文档末尾追加下列四行
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN
export GOPATH=/home/gopath

[root@node1 ~]# source /etc/profile
[root@node1 ~]# go version
go version go1.14 linux/amd64
[root@node1 ~]# 

2、准备工作
1)node2安装nginx,放行80端口,关闭selinux,重启nginx服务。

[root@node2 ~]# yum install epel-release -y
[root@node2 ~]# yum install nginx -y
[root@node2 ~]# firewall-cmd --add-port=80/tcp --permanent
success
[root@node2 ~]# firewall-cmd --reload
[root@node2 ~]# vim /etc/selinux/config 
[root@node2 ~]# cat /etc/selinux/config | grep  SELINUX
SELINUX=disabled
[root@node2 ~]# setenforce 0
success
[root@node2 ~]# systemctl restart nginx
[root@node2 ~]# nginx -s reload
[root@node2 ~]# 

现在打开浏览器输入node2的ip即可浏览到nginx的默认index页面。

2)node1放行9090端口,关闭selinux。

[root@node1 ~]# firewall-cmd --add-port=9090/tcp --permanent
success
[root@node1 ~]# firewall-cmd --reload
[root@node1 ~]# vim /etc/selinux/config 
[root@node1 ~]# cat /etc/selinux/config | grep  SELINUX
SELINUX=disabled
[root@node1 ~]# setenforce 0
success
[root@node1 ~]# 

3、node1运行后端go文件

[root@node1 ~]# cd /home/gopath/
[root@node1 gopath]# go get github.com/gorilla/mux
[root@node1 gopath]# vim rest.go 
[root@node1 gopath]# cat rest.go
package main

import (
	"encoding/json"
	"github.com/gorilla/mux"
	"log"
	"math/rand"
	"net/http"
	"strconv"
)

//Book Struct
type  Book struct{
   
	ID string `json:"id"`
	Isbn string `json:"isbn"`
	Title string `json:"title"`
	Author *Author `json:"author"`
}

//Author Struct
type Author struct {
   
	Firstname string `json:"firstname"`
	Lastname string `json:"lastname"`
}

//Init books var as a slice(切片) Book struct
var books []Book

//Get all Books
func getBooks(w http.ResponseWriter,r *http.Request){
   
	w.Header().Set("Content-Type","application/json")
	json.NewEncoder(w).Encode(books)
}

//Get single Books
func getBook(w http.ResponseWriter,r *http.Request){
   
	w.Header().Set("Content-Type","application/json")
	params:=mux.Vars(r) //参数
	for _,item:=range books{
   
		if item.ID==params["id"]{
   
			json.NewEncoder(w).Encode(item)
			return
		
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值