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

Express删除用户后路由异常:停留在删除路径而非用户管理页

问题原因

当前删除用户后直接在删除路由中渲染用户列表页面,浏览器URL不会改变,仍停留在删除操作的路由地址上,导致后续路由逻辑异常。

解决方案

方案1:删除后重定向到用户管理路由

修改userController.js中的deleteUser方法,删除成功后不再直接渲染页面,而是重定向到/admin/admin_users路由:

exports.deleteUser = async (request, response) => {
    const user_id = request.params.id;

    try {
        // Delete the user
        await new Promise((resolve, reject) => {
            mysqlConnection.query('DELETE FROM users WHERE user_id=?', [user_id], (err, result) => {
                if (err) {
                    reject(err);
                } else {
                    console.log('User deleted');
                    resolve();
                }
            });
        });

        // 重定向到用户管理页面路由,而非直接渲染
        response.redirect('/admin/admin_users');
    } catch (error) {
        console.log(error);
        response.status(500).send('Error deleting user');
    }
};

此修改会让浏览器跳转到/admin/admin_users路由,由该路由负责查询用户列表并渲染页面,URL也会同步更新为正确地址。

方案2:规范删除请求方式(推荐)

用a标签发起GET请求删除资源不符合RESTful规范,建议改用表单提交POST/DELETE请求,同时配合重定向:

  1. 修改admin_users.ejs中的删除链接为表单:
<td>
    <a href="../users/edit_user/<%= entry.user_id %>">EDIT</a>
    <form action="../users/delete_user/<%= entry.user_id %>" method="POST" style="display:inline;">
        <button type="submit" style="border:none; background:none; color:blue; text-decoration:underline; cursor:pointer;">DELETE</button>
    </form>
</td>
  1. 更新Express路由配置,支持POST请求的删除接口:
// 替换原GET路由为POST路由
router.post('/users/delete_user/:id', userController.deleteUser);
  1. 保持deleteUser方法中删除后的重定向逻辑,与方案1一致。
补充说明
  • 重定向会让浏览器发起新请求到目标路由,既更新URL,也能避免用户刷新页面时重复执行删除操作(GET请求刷新会再次触发删除)。
  • 使用POST/DELETE请求处理删除操作更安全,可防止误触发或恶意请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:01:31