go 跨域问题解决

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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))
}

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

1
2
3
4
5
6
7
8
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 } }),
}

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

作者

datehoer

发布于

2023-07-25

更新于

2023-10-19

许可协议

评论