1

我在我的 express 应用程序中使用 sqlite3,当用户将新帐户添加到我的系统时,我使用此代码将信息添加到数据库:

db.run(`INSERT INTO accounts(uuid, email, pass, device, user, pet, gold, is_active) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
    [this.uuid, this.email, this.pass, this.device, this.user, this.pet, this.gold, this.is_active],
    function (err) {
        if (err) {
            return console.log(err.message);
        }
    });

db - 是我的 sqlite3 实例

我相信应该有一种方法可以更好地编码(也许有传播的东西?)。但我不明白如何从“this”中仅获取特定属性(它包含其他属性,我的数据库中不需要)

4

1 回答 1

2

您可以创建要从中提取的属性数组this,然后.map

const props = 'uuid email pass device user pet gold is_active'.split(' ');
db.run(
  `INSERT INTO accounts(uuid, email, pass, device, user, pet, gold, is_active) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
  props.map(prop => this[prop]),
  function(err) {
    if (err) {
      return console.log(err.message);
    }
  }
);

通过保存属性字符串,可以减少重复性(并且更不容易出错),这样您就可以对其进行拆分传递给 的第一个参数.run

const propsStr = 'uuid, email, pass, device, user, pet, gold, is_active';
const props = propsStr.split(', ');
db.run(
  `INSERT INTO accounts(${propsStr}) VALUES(${propsStr.replace(/\w+/g, '?')})`,
  props.map(prop => this[prop]),
  function(err) {
    if (err) {
      return console.log(err.message);
    }
  }
);
于 2020-01-25T23:27:55.753 回答