Express搭配Handlebars注册时始终返回成功消息跳转错误如何解决
问题排查与修复方案
核心错误点1:路由逻辑提前终止响应
你的注册POST路由第一行就执行了res.render("user/cadastrar"),这行代码会直接向客户端返回响应,后续的表单校验、用户保存、跳转逻辑全部不会执行,同时会触发「响应头已发送无法重复设置」的报错。
修复方式:直接删除这行冗余代码。
核心错误点2:拼写错误导致校验规则失效
所有判断字符长度的代码中,你把length错误拼写为lenght,导致所有表单校验规则全部不生效,不管输入什么内容,错误数组永远为空,永远走用户保存逻辑。
修复方式:把两处拼写错误修正:
// 原错误代码 if(req.body.nome.lenght < 3) if(req.body.senha.lenght <= 6) // 修正后 if(req.body.nome.length < 3) if(req.body.senha.length <= 6)
核心错误点3:成功回调跳转拼写错误
用户保存成功的回调中,你把res.redirect("/")错误写为console.redirect("/"),console对象不存在redirect方法,此处执行会直接抛出异常,进入catch分支,所以不管保存是否成功,都会执行错误提示设置逻辑。
修复方式:修正跳转拼写:
new CadastroUsuario(novoUsuario).save().then(() => { req.flash("success_msg", "O cadastro foi bem sucedido") res.redirect("/") // 替换原来的console.redirect }).catch((err) => { console.log(err) // 新增错误日志,方便排查数据库存储问题 req.flash("error_msg", "O cadastro foi mal sucedido") res.redirect("/user/cadastrar") })
跳转路径错误修复
你提到注册失败跳转路径错误,是因为你没有配置/user/cadastrar对应的GET路由,该路由负责渲染注册表单页面,需要在你的index_user路由文件中新增如下配置:
router.get('/cadastrar', (req, res) => { res.render("user/cadastrar") })
额外优化说明
你当前的表单校验失败逻辑是直接渲染页面传递错误数组,这个写法是生效的,拼写修正后,校验失败会直接在表单页面输出对应的错误提示,不需要额外修改handlebars模板。
内容的提问来源于stack exchange,提问作者kaynan felipe rodrigues vieira
相关产品推荐
相关产品推荐

