Nuxt 2中使用Validate方法校验多个查询参数失效问题
Nuxt.js 2页面查询参数校验问题修复
问题根源
field参数校验逻辑错误
原代码里的query.field && query.field !== "1" || query.field && query.field !== '2'逻辑完全不对——不管field是1、2还是其他值,这个条件都会成立。比如field=1时,query.field !== '2'是true,整个或运算结果为true,直接抛出错误;field=2时同理,合法参数也被拦截了。company异步校验未返回Promise
company的校验用了axios异步请求,但没把Promise返回给validate方法。Nuxt的validate方法如果处理异步逻辑,必须返回Promise,不然它会直接认为校验通过,根本不会等请求结果。
修复后的完整代码
validate({ query, app }) { // 校验field:必须是"1"或"2"(如果存在的话) if (query.field) { if (!["1", "2"].includes(query.field)) { throw new Error('error') } } // 校验company:存在则发起异步校验,返回Promise给validate if (query.company) { return app.$axios.get(`/api/company-check/${query.company}`) .then(res => res.data.success) .catch(() => false) // 请求失败直接返回false拦截页面 } // 所有校验通过返回true return true }
核心修复说明
- 把field的校验改成用数组
includes判断,逻辑简单准确,不会出现误判。 - 异步校验必须返回axios的Promise,让Nuxt能等待请求完成后再决定是否放行页面。
- 加了catch处理请求失败的情况,避免因为接口报错导致校验流程崩溃。
内容的提问来源于stack exchange,提问作者Chinese_hacker_lm
相关产品推荐
相关产品推荐

