長(zhǎng)沙網(wǎng)站搭建百度引流推廣費(fèi)用多少
我前端使用ant design vue pro框架,后端使用kratos框架開發(fā)。因?yàn)橹耙步鉀Q過跨域問題,正常是在后端的http請(qǐng)求中加入中間件,設(shè)置跨域需要通過的字段即可,代碼如下所示:
func NewHTTPServer(c *conf.Server, s *conf.Secret, rolesm *service.RolesManageService, tracer trace.TracerProvider, logger log.Logger) *http.Server {var opts = []http.ServerOption{http.Middleware(recovery.Recovery(),tracing.Server(tracing.WithTracerProvider(tracer)),logging.Server(logger),validate.Validator(),metadata.Server(),LocalHttpRequestMiddleware(),selector.Server(jwt.Server(func(token *jwtv5.Token) (interface{}, error) {return []byte(s.Bigantauthen), nil}, jwt.WithSigningMethod(jwtv5.SigningMethodHS256)),).Match(NewWhiteListMatcher()).Build(),),
// 下面需要解決跨域問題的字段http.Filter(handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"}),handlers.AllowedMethods([]string{"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE"}),handlers.AllowedOrigins([]string{"*"}),handlers.AllowCredentials(), // 允許攜帶憑證(如 cookies))
之前可以正常運(yùn)行,但是我在前端設(shè)計(jì)時(shí),在登錄請(qǐng)求后的請(qǐng)求中,在頭部信息加入了一個(gè)自定義字段,為了后端獲取后檢索緩存信息,這樣就不用反復(fù)從數(shù)據(jù)庫(kù)查詢了。想法是這個(gè)樣子但是測(cè)試中就開始報(bào)錯(cuò)了,報(bào)的是跨域錯(cuò)誤,代碼如下。
Access to XMLHttpRequest at 'http://localhost:8002/user/info' from origin 'http://localhost:8000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
但奇怪的是前面login的請(qǐng)求可以正常通過,后面的userinfo請(qǐng)求就拒絕了。我就在想,要是跨域問題,就應(yīng)該所有請(qǐng)求都拒絕呀,不應(yīng)該選擇性拒絕呀,而且我后端也沒做相關(guān)的請(qǐng)求過濾的語(yǔ)句,報(bào)錯(cuò)的有點(diǎn)蹊蹺。
我于是開始問DeepSeek。它給我的回答和之前設(shè)置的內(nèi)容一樣。要不就在前端做代理,如下代碼所示,對(duì)vue.config.js做相關(guān)修改。
module.exports = {devServer: {proxy: {'/api': {target: 'http://localhost:8002', // 后端地址changeOrigin: true,pathRewrite: {'^/api': ''}}}}
}
但是,我這里不想修改前端,因?yàn)橐菍?shí)際部署,如果跨域問題是出在后端,部署之后bug還會(huì)存在。于是我把網(wǎng)頁(yè)控制臺(tái)的報(bào)錯(cuò)信息截圖發(fā)給DeepSeek,讓它幫忙給分析以下,并且把我的疑問也一同發(fā)給它。后來(lái),在它給的答案中無(wú)意中發(fā)現(xiàn)了一條內(nèi)容,引起了我的注意。就是如下圖所示的內(nèi)容:
handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization", "Your-Custom-Header"}),
這里有一個(gè)"Your-Custom-Header"你自定義的頭。哦!我恍然大悟,可能是我在userinfo中在頭部自定義的頭部信息的原因。為了驗(yàn)證我的猜測(cè),我把頭部自定義的頭部信息刪除后,再去測(cè)試,發(fā)現(xiàn)可以通過了,跨域報(bào)錯(cuò)沒有了,這證明了我的猜測(cè)是正確的。于是在服務(wù)端做了如下調(diào)整:
http.Filter(handlers.CORS(handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization", "Kt"}), //這里需要添加自定義的頭部信息如Kthandlers.AllowedMethods([]string{"GET", "POST", "HEAD", "OPTIONS", "PUT", "DELETE"}),handlers.AllowedOrigins([]string{"*"}),handlers.AllowCredentials(), // 允許攜帶憑證(如 cookies))
將前端自定義的頭部鍵字段:Kt? 添加在了cors請(qǐng)求里,再去測(cè)試,可以正常運(yùn)行了。
總結(jié),DeepSeek真的很強(qiáng)大,你完全可以將它作為你的一個(gè)老師,有問有答,按照思維邏輯循序遞進(jìn),它不但可以讀懂你的問題,代碼,它還能讀懂截圖。對(duì)于程序員學(xué)習(xí)和工作都有極大的幫助,用好了真可謂事半功倍。當(dāng)然,網(wǎng)上也有很多直接用DeepSeek寫代碼的,這個(gè)雖然效率更高,但對(duì)于新手來(lái)說(shuō),我個(gè)人建議起初不要那么使用。因?yàn)镈eepSeek直接寫代碼,也會(huì)和人類一樣,會(huì)出錯(cuò),有各種bug,并且人機(jī)交流過程中,它做的未必真的就是你想要的。你要看懂它寫的程序,并且把bug找出來(lái),告訴它如何修改,這需要你自身有一定功底,在內(nèi)功沒練好之前,你很難駕馭有DeepSeek自動(dòng)生成一整個(gè)正確的項(xiàng)目。不如從簡(jiǎn)單問題著手,分單一模塊功能交給DeepSeek編寫,然后自己完成單元測(cè)試,然后逐步的組合,直至完成整個(gè)項(xiàng)目。這樣,從中你也得到了學(xué)習(xí)和鍛煉,也明白了整個(gè)過程和細(xì)節(jié)。不是由AI支配你,而是你使用了AI。我認(rèn)為這才是好的使用AI的方式。