【发布时间】:2020-04-07 15:39:59
【问题描述】:
我正在尝试在我的网络应用程序中为用户创建 CRUD。我使用 uuid 作为我的 id(也是下面用户表中显示的主键)。
我正在使用 pg-promise 库连接到 Postgres。创建用户和获取所有用户的路由代码正在工作。
但是我在创建 id const 以获取一个用户、删除用户或更新用户时如何引用 uuid 遇到了挑战,即
const user_id = parseInt(req.params.id);
请在下面查看我的示例代码。我也会感谢任何在线资源的例子。
我的用户表
CREATE TABLE m_user (
id uuid DEFAULT uuid_generate_v4() NOT NULL,
username text NOT NULL UNIQUE,
password text NOT NULL,
confirm_password text NOT NULL,
created_at timestamp NOT NULL default now(),
last_login timestamp NOT NULL default now(),
PRIMARY KEY (id)
);
CRUD 获得一个用户
function getSingleUser(req, res, next) {
const showoneuserquery = 'SELECT * FROM user where id = $1'
const user_id = parseInt(req.params.id);
db.one(showoneuserquery, user_id)
.then(function (data) {
res.status(200)
.json({
status: 'success',
data: data,
message: 'Retrieved ONE user'
});
})
.catch(function (err) {
return next(err);
});
}
CRUD 编辑用户
function editUser(req, res, next) {
const edituserquery = 'update user set username=$1, password=$2, confirm_password=$3 where id=$4'
db.none(edituserquery, [req.body.username, req.body.password, req.body.confirm_password, (req.params.id)])
.then(function () {
res.status(200)
.json({
status: 'success',
message: 'Updated user'
});
})
.catch(function (err) {
return next(err);
});
}
【问题讨论】:
-
你能提供你的快速路由器的代码吗?
-
@Khauri 我将路由器业务逻辑与控制器文件中的路由分开。我处理的代码是我的问题中指出的业务逻辑。但也许我不明白你所指的代码。
-
请用您在运行指定操作后遇到的错误/情况更新您的问题。
-
您说您在使用
req.params.id引用 ID 时遇到问题?通常您会在路由器中指定该值,如下所示:router.get('/:id', getSingleUser)。如果这不是您的意思,您能否更具体地说明您遇到的错误? -
一些笔记。首先是我不知道 ExpressJS 的免责声明。但是......你声称你正在使用 uuid 作为你的表的主要。但是,这不是在数据库表级别定义的方式。您发布的表 DDL 将 id 定义为 BIGSERIAL。该定义使其成为 64 位整数。但是,uuid 是一个 32 字节的十六进制值。此外,user 是 Postgres 和 SQL 标准 reserved word。虽然你现在可以侥幸使用它,但如果 Postgres 开发团队决定更接近 SQL 标准,它可能会消失。
标签: node.js postgresql uuid