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请求,同时配合重定向:
- 修改
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>
- 更新Express路由配置,支持POST请求的删除接口:
// 替换原GET路由为POST路由 router.post('/users/delete_user/:id', userController.deleteUser);
- 保持
deleteUser方法中删除后的重定向逻辑,与方案1一致。
补充说明
- 重定向会让浏览器发起新请求到目标路由,既更新URL,也能避免用户刷新页面时重复执行删除操作(GET请求刷新会再次触发删除)。
- 使用POST/DELETE请求处理删除操作更安全,可防止误触发或恶意请求。
内容的提问来源于stack exchange,提问作者wellbi
相关产品推荐
相关产品推荐

