仅在 Put Restify + SQLite3 上更新某些字段
Only Update Certain Fields on Put Restify + SQLite3
我正在使用 Restify SQLite3 数据库。到目前为止,这就是我的 put
方法:
server.put('/users/:userid', function(req, res, next) {
bcrypt.hash(req.body.password, 10, function(err, hash) {
if (err) {
res.send(err);
} else {
db.run('UPDATE users SET username = ?, first_name = ?, last_name = ?, email = ?, password = ? WHERE id = ?', req.body.username, req.body.first_name, req.body.last_name, req.body.email, hash, req.params.userid, function(err) {
if (err) {
res.send(err);
} else {
res.json({ message:'Successfully updated user'});
}
});
}
});
next();
});
为了让它起作用,必须再次传入每个属性:
{
"username": "greg",
"first_name": "Greg",
"last_name": "Davis",
"email": "gdavis@email.com",
"password": "password"
}
如果只需要更改电子邮件,显然这是多余的。我怎样才能修改我的代码以便传入以下内容就足够了?
{
"email": "gdavis@email.com",
}
我可以添加一些额外的逻辑来检查是否指定了新密码,因为那样更复杂,但是为每个字段添加逻辑似乎过多。
您可能会考虑使用与 sqlite3 兼容的 Sequelize 之类的查询,而不是使用原始数据库查询。然后您可以检索用户对象,仅进行所需的更改,然后 运行 更新该对象。
否则它看起来像是为每个可能的字段创建 if
语句。
我正在使用 Restify SQLite3 数据库。到目前为止,这就是我的 put
方法:
server.put('/users/:userid', function(req, res, next) {
bcrypt.hash(req.body.password, 10, function(err, hash) {
if (err) {
res.send(err);
} else {
db.run('UPDATE users SET username = ?, first_name = ?, last_name = ?, email = ?, password = ? WHERE id = ?', req.body.username, req.body.first_name, req.body.last_name, req.body.email, hash, req.params.userid, function(err) {
if (err) {
res.send(err);
} else {
res.json({ message:'Successfully updated user'});
}
});
}
});
next();
});
为了让它起作用,必须再次传入每个属性:
{
"username": "greg",
"first_name": "Greg",
"last_name": "Davis",
"email": "gdavis@email.com",
"password": "password"
}
如果只需要更改电子邮件,显然这是多余的。我怎样才能修改我的代码以便传入以下内容就足够了?
{
"email": "gdavis@email.com",
}
我可以添加一些额外的逻辑来检查是否指定了新密码,因为那样更复杂,但是为每个字段添加逻辑似乎过多。
您可能会考虑使用与 sqlite3 兼容的 Sequelize 之类的查询,而不是使用原始数据库查询。然后您可以检索用户对象,仅进行所需的更改,然后 运行 更新该对象。
否则它看起来像是为每个可能的字段创建 if
语句。