You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"); // 跳转至错误专用页面
});

同时需为该路径添加路由,渲染对应的错误页面。

验证步骤

  1. 修改元素后提交,确认显示成功提示
  2. 不修改任何元素直接提交,确认显示危险样式的“该元素未发生任何修改”提示

内容的提问来源于stack exchange,提问作者Kalyxos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:05:29