Node.js中基于Session实现错误分路径重定向的问题排查
问题解决:无元素修改时错误提示未正常显示的问题
问题情况
已经实现了通过req.session传递修改成功的提示逻辑,但当未修改任何元素或忘记修改时,预期抛出的错误提示“该元素未发生任何修改”无法正确展示,点击按钮后仍显示成功样式的“element changed”提示。核心问题在于代码中catch块设置的danger类型消息未在/livres页面生效。
原核心代码
routeur.post("/livres/modificationServer", (requete, reponse) => { const livreUpdate = { nom: requete.body.titre, auteur: requete.body.auteur, pages: requete.body.pages, description: requete.body.description, }; livreSchema .updateOne({ _id: requete.body.identifiant }, livreUpdate) .exec() .then((resultat) => { if (resultat.nModified < 1) throw new Error("Requete de modification échouée"); requete.session.message = { type: "success", contenu: "modification effectuée", }; reponse.redirect("/livres"); }) .catch((error) => { console.log(error); requete.session.message = { type: "danger", contenu: error.message, }; reponse.redirect("/livres"); }); });
问题点与修复方案
1. 修正错误提示文本
原代码抛出的错误信息为法语,需替换为需求的中文提示:
// 修改抛出错误的语句 if (resultat.nModified < 1) throw new Error("该元素未发生任何修改");
2. 确保页面根据消息类型渲染样式
检查/livres页面的模板渲染逻辑,必须依据session.message.type区分显示样式(以EJS模板为例):
<% if (session.message) { %> <div class="alert alert-<%= session.message.type %>"> <%= session.message.contenu %> </div> <% delete session.message; %> <!-- 显示后清除消息,避免重复展示 --> <% } %>
若前端未根据type选择对应样式,会导致错误消息仍显示成功样式。
3. 可选:跳转至专用错误路径
如果需求要求将错误导向单独路径,可修改catch块的跳转目标:
.catch((error) => { console.log(error); requete.session.message = { type: "danger", contenu: "该元素未发生任何修改", }; reponse.redirect("/livres/erreur-modification"); // 跳转至错误专用页面 });
同时需为该路径添加路由,渲染对应的错误页面。
验证步骤
- 修改元素后提交,确认显示成功提示
- 不修改任何元素直接提交,确认显示危险样式的“该元素未发生任何修改”提示
内容的提问来源于stack exchange,提问作者Kalyxos
相关产品推荐
相关产品推荐

