我如何创建一个异步CRUD函数来创建用户,生成令牌并在node.js和Postgres中登录用户?

问题描述 投票:0回答:1

注意:我正在使用node.js,express.js,Postgres和pg-promise库。

我想

我希望createUser函数使用哈希密码创建新用户,生成令牌并登录该用户。我希望能够看到Postman中生成的令牌,以便我知道代码是否工作正常。

我正在看什么

我在Postman中测试代码时看到一个空的{}数组。测试时,将按预期在Postgres数据库中创建用户,但邮递员中的响应显示为{}。但是,我希望响应显示成功消息和生成的令牌。我不知道问题出在函数不生成令牌。在下面找到我的代码:

MY CURRENT CREATEUSER FUNCTION

async createUser(req, res) {
    if (!req.body.username || !req.body.email || !req.body.password) {
      return res.status(400).send({'message': 'Some values are missing'});
    }
    const hashedPassword = await bcrypt.hash(req.body.password, 10);
    const createuserquery = `insert into user_table(username, email, email_verified, password, role, created_at, last_login)
                  VALUES ($1, $2, $3, $4, $5, now(), now()) returning *`;
  const createuservalues = [req.body.username, req.body.email, req.body.email_verified, hashedPassword, req.body.role];

  try {
    const result = await db.one(createuserquery, createuservalues);
    const token = jwt.sign(
      { username: result.rows[0].username }, process.env.JWT_SECRET, { expiresIn: '7d' }
    );
  return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: data,
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }
}

我怀疑下面的令牌const:

const token = jwt.sign(
      { username: result.rows[0].username }, process.env.JWT_SECRET, { expiresIn: '7d' }
    );

OR返回res部分如下:

return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: data,
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }
javascript node.js express async-await pg-promise
1个回答
0
投票

[根据您的代码,我不知道您的data来自哪里。但是您可以使用token更改数据。

例如,您可以在下面查看此代码:

return res
    .status(200) 
    .cookie('jwt', token, {
      httpOnly: true
    })
    .json({
      success: true,
      data: { token },
      message: 'One user created'
    });
} catch (err) {
    return res.json(err);
  }

我希望它能为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.