Node js 从嵌套函数中提取数据

时间:2021-02-12 20:24:01

标签: node.js sqlite

我正在尝试处理一个 uni 项目的注册数据。我使用的是基本的 koa 模块,我不允许使用 express,理想情况下我想获取变量 post 中的数据。我想处理数据,例如查看密码是否少于 5 个字符,如果是这样,我希望程序不会将用户重定向到不同的地址,但如果没有发生错误,我希望程序重定向到 {{ 1}},我尝试了许多其他方法,例如在 regOk.html 之外初始化变量,但都没有成功。有人可以帮我吗?

ctx.req.on

1 个答案:

答案 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 的变量。

相关问题