亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

express先后對同一路徑采用post和get訪問問題

express先后對同一路徑采用post和get訪問問題

精慕HU 2018-09-13 14:08:24
我在寫一個論壇webapp,vue+express+mongodb;vue的app.vue下有一個首頁/home,在這里向express發起方式為GET,路徑為/post的請求,用于獲取文章數據,另外一個vue路由為發表文章的路由,在這里發表文章,提交時訪問express的/post,方式為POST。測試能夠正常獲取文章數據,但是當我發表文章提交,express成功將文章保存到了數據庫,返回200狀態碼,然后前端通過vue路由回到首頁,再次向express發起請求獲取文章數據,這時候express服務器就掛了。提示不能在響應頭發送后再設置響應頭。然后我只有重啟服務器再訪問首頁,又能正常讀取到文章數據了。求問怎么回事?express的post路由如下:求大神相助,謝謝啦
查看完整描述

1 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

乍一看,這代碼一大堆的問題!

1) req.app.get('jwtTokenSecret')這里出錯了,一看到這個req就覺得奇怪。但是這個解碼中間件沒用過,為防被打臉,還專門搜了一下。這里應該是var decoded = jwt.decode(token, app.get('jwtTokenSecret')); CtrlC CtrlV 是程序員用的最多的按鍵,這都搞錯的話職業素養還需加強啊。

2)if語法問題。你的if(err)內部既沒有return后面也沒else分支,所以err為真時整個函數體的代碼都執行了,而你本意是一個if else。這里我猜你認為res.end會終止整個響應函數?

3)一個響應如果已經end之后,是不能再去設置status的,否則會報錯退出程序。在express里面,每次調用send、json這些響應方法的時候,都會自動附加一個end。你send之后還來一個status,程序終結。

4)try catch 不能捕捉異步里面的異常,而newPost.save這顯然是一個異步過程,所以你這里的try catch只能捕捉到同步過程中的異常。話說,你是想捕捉哪一步的異常呢?我猜只是想捕捉解碼那部分吧。try里面包的東西太多了,你本來就想不讓解碼的出錯影響到其他,但是后面你還用了name:decoded.iss,那這個try catch就耐人尋味了。應該將catch放在這句之前。

接下來我就幫你還原一下這個流程是怎么掛的吧。首先是post請求發文對吧,一個請求過來,首先在var decoded = jwt.decode(token,req.app.get('jwtTokenSecret'));這里就應該掛了,第一個if,如果進去又掛了,然后new也可能掛一次,save異步直接過去,然后res.send。接著save的異步里面又有可能掛一次?;蛘遚atch 里面也會掛一次。所以我覺得應該不是在你請求的時候才掛的,應該是早掛了吧?

說實話,我還是建議你好好看看js語法,然后好好看看官方文檔,然后再好好看看別人代碼,才來寫你的。


查看完整回答
反對 回復 2018-10-23
  • 1 回答
  • 0 關注
  • 1171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號