go 跨域问题解决

7/25/2023 教程go

我在go中其实已经写好了corsMiddleware中间件,只需要给每一个请求都套上即可。

func main() {
	booksHandler := &booksHandler{}
	bookHandler := &bookHandler{}
	articleHandler := &articleHandler{}
	registerHandler := &registerHandler{}
	loginHandler := &loginHandler{}
	searchHandler := &searchHandler{}
	http.Handle("/api/register", registerHandler)
	http.Handle("/api/login", corsMiddleware(loginHandler))
	http.Handle("/api/books", corsMiddleware(authMiddleware(booksHandler)))
	http.Handle("/api/search/", http.StripPrefix("/api/search", corsMiddleware(authMiddleware(searchHandler))))
	http.Handle("/api/book/", http.StripPrefix("/api/book", corsMiddleware(authMiddleware(bookHandler))))
	http.Handle("/api/article/", http.StripPrefix("/api/article", corsMiddleware(authMiddleware(articleHandler))))
	log.Fatal(http.ListenAndServe(":8089", nil))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

原来问题其实出在了这里/api/article/以及前端代码中的路径,需要对应才可以

const ApiService = {
    register: (username, password) => api.post("/api/register/", { username, password }),
    login: (username, password) => api.post("/api/login/", { username, password }),
    getBooks: (page) => api.get("/api/books/", { params: { page } }),
    searchBooks: (search_keyword) => api.get("/api/search/", { params: { search_keyword } }),
    getBookDetails: (book_id) => api.get("/api/book/", { params: { book_id } }),
    getArticleDetails: (article_id) => api.get("/api/article/", { params: { article_id } }),
}
1
2
3
4
5
6
7
8

本地测试的时候发现前端vue无法根据set-cookie设置cookie 于是各种修改,最后发现应该增加cookie的path和httponly就可以了。