【问题标题】:Only Update Certain Fields on Put Restify + SQLite3仅更新 Put Restify + SQLite3 上的某些字段
【发布时间】:2017-01-09 11:22:25
【问题描述】:

我将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",
}

我可以添加一些额外的逻辑来检查是否指定了新密码,因为这更复杂,但是为每个字段添加逻辑似乎过多。

【问题讨论】:

    标签: javascript node.js rest sqlite restify


    【解决方案1】:

    您可能会考虑使用与 sqlite3 兼容的 Sequelize 之类的东西,而不是使用原始 DB 查询。然后,您可以检索用户对象,仅进行所需的更改,然后对对象运行更新。

    否则,为每个可能的字段创建 if 语句似乎是有序的。

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多