注意:我正在使用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);
}
[根据您的代码,我不知道您的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);
}
我希望它能为您提供帮助。