[当我在Postman中测试代码时,我看到QueryREsultError。我正在使用node.js,express.js和pg-promise。在测试中,将按预期在Postgres数据库中创建用户,但是响应将显示QueryResultError,其中包含创建的数据和我的代码中的查询,如下所示。但是,我希望响应仅显示成功消息和生成的令牌。我不知道问题出在db.none还是代码未生成令牌。在下面找到我的代码:
CREATEUSER FUNCTION
async createUser(req, res) {
const hashedPassword = await bcrypt.hash(req.body.password, 10);
const query = `insert into user_table(username, email, email_verified, password, role, created_at, last_login)
VALUES ($1, $2, $3, $4, $5, $6, $7) returning *`;
const values = [req.body.username, req.body.email, req.body.email_verified, hashedPassword, req.body.role, 'now()', 'now()'];
try {
const { rows } = await db.none(query, values);
const token = Helper.generateToken(rows[0].username);
return res
.status(200)
.cookie('jwt', token, {
httpOnly: true
})
.json({
success: true
});
} catch (err) {
return res.json(err);
}
},
Helper.generateToken
generateToken(username) {
const token = jwt.sign({
username: username
},
process.env.JWT_SECRET, { expiresIn: '7d' }
);
return token;
}
}
错误显示
{
"name": "QueryResultError",
"code": 1,
"result": {
"command": "INSERT",
"rowCount": 1,
"oid": 0,
"rows": [
{
"id": "8af645cd-5ce5-496a-b07f-db98f4897fee",
"username": "juljgggg",
"email": "[email protected]",
"email_verified": "[email protected]",
"password": "$2a$12$UmQJ6qKP4nhrWS9kYxySGuBIWv5eyOHzbKtjvLzRQS5qL5bGRssym",
"role": "Subscriber",
"created_at": "2020-01-27T13:43:38.122Z",
"last_login": "2020-01-27T13:43:38.122Z"
}
],
"fields": [
{
"name": "id",
"tableID": 42033,
"columnID": 1,
"dataTypeID": 2950,
"dataTypeSize": 16,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "username",
"tableID": 42033,
"columnID": 2,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "email",
"tableID": 42033,
"columnID": 3,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "email_verified",
"tableID": 42033,
"columnID": 4,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "password",
"tableID": 42033,
"columnID": 5,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "role",
"tableID": 42033,
"columnID": 6,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "created_at",
"tableID": 42033,
"columnID": 7,
"dataTypeID": 1114,
"dataTypeSize": 8,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "last_login",
"tableID": 42033,
"columnID": 8,
"dataTypeID": 1114,
"dataTypeSize": 8,
"dataTypeModifier": -1,
"format": "text"
}
],
"_parsers": [
null,
null
],
"_types": {
"_types": {code ommitted
}
},
"text": {},
"binary": {}
},
"RowCtor": null,
"rowAsArray": false,
"duration": 40
},
"query": "insert into user_table(username, email, email_verified, password, role, created_at, last_login)\n VALUES ('juljgggg', '[email protected]', '[email protected]', '$2a$12$UmQJ6qKP4nhrWS9kYxySGuBIWv5eyOHzbKtjvLzRQS5qL5bGRssym', 'Subscriber', 'now()', 'now()') returning *",
"received": 1
}
您确实要传递now()
作为乱码,而您确实希望函数返回值。因此,请勿将其作为参数传递:
const query = `insert into user_table(username, email, email_verified, password, role, created_at, last_login)
VALUES ($1, $2, $3, $4, $5, now(), now()) returning *`;
const values = [req.body.username, req.body.email, req.body.email_verified, hashedPassword, req.body.role];