前端老弟第一次寫後端,崩了

幽默輕鬆小知識,一起來看看老弟第一次寫的後端程式碼,你覺得如何?

大家好,我是魚皮,今天分享我的老弟第一次寫後端程式碼時出現的囧事,希望大家引以為戒。

孽起

我的老弟小阿巴,目前大一,自學程式設計有一段時間了,之前主要以學前端為主,比較好上手。

前端老弟第一次寫後端,崩了

但這貨最近不知道咋回事,一直嚷嚷著要寫寫後端程式碼。

我說:你前端才剛學沒多久呢,急什麼?

小阿巴說:沒人比我更懂前端!

前端老弟第一次寫後端,崩了

好傢伙,沒想到幾日不見,這傢伙現在這麼驕傲了!那必須得殺殺他的銳氣,讓他領略一下後端的恐怖。

於是我說:成,正好我最近在開發一個新功能【刪除訊息】,功能很簡單,允許使用者刪除自己已經閱讀過的訊息。前端後端都交給你來做,時間也不急,給你兩週,拿去練練手,熟悉下專案吧~

沒想到小阿巴這狗說:兩週?瞧不起誰呢,就這麼一個小功能,我 3 天給你搞定!

我大驚:現在的年輕人都這麼強了麼?行,我等你!

前端老弟第一次寫後端,崩了

沒想到,不到 3 天,小阿巴真的提交了程式碼,讓我們一起來看看他的實現思路和程式碼吧。

實現思路

功能實現包括前端和後端兩部分,分別來思考一下。

前端

要實現使用者已讀訊息刪除功能,前端的工作比較簡單,新增一個刪除按鈕,並且給按鈕新增一個點選事件,點選後呼叫後端

訊息刪除

介面即可。

前端老弟第一次寫後端,崩了

前端介面

小阿巴寫的前端程式碼:

<!—— 虛擬碼 ——>

看著好像沒啥問題吧,寫的還挺工整的,程式碼規範好評!

再看看後端怎麼樣。

後端

後端要做的事情就是接受前端發過來的請求,操作資料庫,將資料庫中指定 id 的訊息刪除,再返回是否刪除成功給前端。

前端老弟第一次寫後端,崩了

存放訊息的資料庫

很多程式語言都可以拿來寫後端,比如 Java、Go 語言等。但由於小阿巴是第一次做後端,我心疼他,所以讓它使用 NodeJS(JavaScript 語法)來寫。

看看小阿巴寫的後端程式碼:

// 刪除訊息介面// @params msgId 訊息 idfunction deleteMsgById(msgId) { // 呼叫資料庫刪除函式,得到結果 const res = db。deleteById(msgId); return res;}

總共就這麼幾行程式碼,簡潔清晰,也難怪小阿巴花了 3 天的時間就寫出來了。

不知道大家覺得這段程式碼怎麼樣,像不像自己第一次寫的程式碼呢?

請大家思考一下,他寫的程式碼有沒有什麼問題?

前端老弟第一次寫後端,崩了

分析問題

其實,小阿巴這段程式碼問題非常大!一旦上線了,後果不堪設想!

主要有三個問題,我把小阿巴叫了過來,要根據問題的嚴重性從大到小給他盤一盤。

前端老弟第一次寫後端,崩了

1。 未做校驗

我對小阿巴說:再仔細看看你的程式碼,是不是少了校驗邏輯?

小阿巴疑惑:我不是在前端判斷訊息 id 是否存在、訊息是否已讀了麼?

我:那如果使用者不在瀏覽器裡點刪除按鈕,而是直接請求介面,隨便傳訊息 id 呢?

小阿巴陷入了沉思。

前端老弟第一次寫後端,崩了

這是第一次寫後臺的同學經常犯的錯誤,尤其是前後端都一個人寫的時候,以為在前端判斷引數是否合法就夠了。但其實,惡意使用者可不管這麼多,他們可以直接用各種工具在瀏覽器外向你的後端傳送請求,隨便傳一些訊息 id,甚至直接遍歷可能的 id。如果後端不做校驗,一上線,正常使用者的訊息可能就被刪光了!絕對的

最高階事故

小阿巴:沒想到這麼嚴重,那我在後臺補上對訊息狀態的校驗,好像也不太行吧?畢竟使用者可以任意傳遞請求引數。

我:挺聰明嘛,的確如此,所以我們還要補上對當前登入使用者的校驗。

完善的程式碼大致是這樣的:

// 刪除訊息介面// @params msgId 訊息 idfunction deleteMsgById(msgId) { // 校驗引數合法性 if (!mgsId) { return false; } // 從資料庫查訊息最新狀態 const msg = db。getMsgById(msgId); // 從 session 或中介軟體獲取當前使用者資訊 const user = getCurrentUser(); // 訊息未讀或不是該使用者的訊息 if (!msg。isRead || !user || msg。userId !== user。id) { return false; } // 呼叫資料庫刪除函式,得到結果 return db。deleteById(msgId);}

小阿巴:我記住啦,後端介面是業務核心,一定要加強校驗!

我:不錯,來看看其他的問題吧。

2。 硬刪除

我:在你的程式碼中,直接呼叫了

delete

函式直接刪除資料,你知道這會有什麼問題麼?

小阿巴:有啥問題?

我:直接刪除資料,會導致管理員在需要排查問題時缺少線索。比如使用者傳送過違規訊息,一段之間後把訊息自己刪掉了,那管理員也不能查出他的違規記錄了。

小阿巴:還真是,那咋辦?這資料不能刪?

前端老弟第一次寫後端,崩了

我:一般會採用

軟刪除

,給資料表新增一個額外的欄位來表示刪除狀態,比如

isDelete

,狀態為 0 表示未刪除,為 1 表示已刪除。正常情況下,只給使用者展示 isDelete = 0 的資料,刪除時,將該欄位的值從 0 更新為 1 即可。

所以上述程式碼的最後那部分,可以略作修改:

// 原始碼,真實刪除db。deleteById(msgId)// 新程式碼,軟刪除(更新)db。updateById(msgId, {isDelete: 1})

這樣後端程式碼就基本完善了。

當然,也不是所有的資料表都需要軟刪除,要根據業務場景來決定。

3。 無防誤觸

最後還有一個產品體驗上的小問題,建議在使用者點選刪除時,出一個二次確認的彈框,否則使用者不小心點錯了,想找卻又找不回訊息,那就會感到憤怒了!

前端老弟第一次寫後端,崩了

確認刪除

前端開發做的越多,就會越注重這些小細節,提升使用者體驗非常重要!

小阿巴:學到了,學到了!我好菜啊 555。

我:沒事,這是很正常的,知錯能改,就還是好阿巴。

前端老弟第一次寫後端,崩了

很多正在閱讀文章的朋友們,是否也犯過這些小錯誤呢?請養成良好的程式設計習慣,多多檢查自己的程式碼吧!

對了,聽說點個

,印象更深刻!

前端老弟第一次寫後端,崩了