1 回答

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語法,然后好好看看官方文檔,然后再好好看看別人代碼,才來寫你的。
添加回答
舉報