在我的Express API中,我希望客户端能够包括他们的电话号码或网站地址,或者根本不包括。
下面是SELECT语句的执行方式:
-- SELECT all users
SELECT * FROM users
ORDER BY user_id ASC;
-- SELECT a user
SELECT * FROM users
WHERE user_id = $1;
这就是INSERT语句当前的执行方式,它将任何未定义的值默认为NULL
:
INSERT INTO users (name, username, email, phone, website)
VALUES ($1, $2, $3, $4, $5) RETURNING *;
以下是POST请求的回调函数的处理方式:
const createUser = async (req, res, next) => {
const { name, username, email, phone, website } = req.body;
try {
const create = await db.query(insertUser, [
name,
username,
email,
phone,
website,
]);
res
.status(201)
.json({ message: "User Created Successfully!", user: create.rows[0] });
} catch (err) {
// If UNIQUE constraint is violated
if (err.code == "23505") {
uniqueConstraintError(err, next);
} else {
serverError(err, next);
}
}
};
insertUser
是存储PostgreSQL语句的变量 *。
如果我尝试添加用户信息而不输入phone和website(可选),GET请求仍将显示那些赋值为NULL
的列:
{
"user_id": 10,
"name": "Bruce Wayne",
"username": "Batman",
"email": "bat@cave.com",
"phone": null,
"website": null
}
有没有办法不在SELECT语句中显示这些NULL
值,而是使用类似下面的GET语句?
{
"user_id": 10,
"name": "Bruce Wayne",
"username": "Batman",
"email": "bat@cave.com"
}
1条答案
按热度按时间q9yhzks01#
您可以在postgres中使用json_strip_nulls