postgresql 不要在node-postgres的SELECT和GET中显示空值

ewm0tg9j  于 2022-11-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(156)

在我的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"
}
q9yhzks0

q9yhzks01#

您可以在postgres中使用json_strip_nulls

相关问题