我正在尝试处理一个 uni 项目的注册数据。我使用的是基本的 koa 模块,我不允许使用 express,理想情况下我想获取变量 post
中的数据。我想处理数据,例如查看密码是否少于 5 个字符,如果是这样,我希望程序不会将用户重定向到不同的地址,但如果没有发生错误,我希望程序重定向到 {{ 1}},我尝试了许多其他方法,例如在 regOk.html
之外初始化变量,但都没有成功。有人可以帮我吗?
ctx.req.on
答案 0 :(得分:0)
我对 koa 不是很熟悉,但我相信您的问题与您的代码执行顺序有关。
负责解析请求正文中接收到的数据的事件在您的 postregister 方法同步执行后结束,因此您永远无法按照您期望的顺序看到 post 的值。
解决此问题的一种可能解决方案是将数据解析包装在承诺中,等待该承诺完成,并在处理完成后执行 then 和 catch 函数。
export async function postregister(ctx) {
await new Promise((resolve) => {
let bodyString = "";
ctx.req.on("data", (chunk) => {
bodyString += chunk;
});
ctx.req.on("end", async () => {
resolve(querystring.parse(bodyString));
});
})
.then(async (post) => {
await model.add(ctx.db, post)
.then(async () => {
console.log("singup successful");
await ctx.render('regOk.html');
});
})
.catch(async (error) => {
console.error(error);
await ctx.render('error.html');
});
}
通过这种方式,您可以在 Promise 内部处理正文解析,完成之后您将在 then 处理程序中将 querystring.parse(bodyString)
的结果作为名为 post
的变量。