使用 knex js 时,如何在 ES6 中将 req.body 转换为模型以匹配数据库列? - Javascript.



我正在使用es6开发节点js。 我有一个字段很少的表。我正在使用 knex js 进行查询构建和数据库管理。 我的疑问是如何通过将 req.body 对象发送到 es6 类构造函数来设置字段? 例如。

class User {
  constructor(user_id, email, username, password, phone, first_name, last_name, created_at, created_by, updated_at, updated_by){
    this.user_id = user_id;
    this.email = email;
    this.username = username;
    this.password = password;
    this.phone = phone;
    this.first_name = first_name;
    this.last_name = last_name;
    this.created_at = created_at;
    this.created_by = created_by;
    this.updated_at = updated_at;
    this.updated_by = updated_by;
  }
  get _user_id(){
      return this.user_id;
  }
  set _user_id(user_id){
      this.user_id = user_id;
  }
  get _email(){
      return this.email;
  }
  set _email(email){
      this.email = email;
  }
  get _username(){
      return this.username;
  }
  set _username(username){
      this.username = username;
  }
  get _password(){
      return this.password;
  }
  set _password(password){
      this.password = password;
  }
  get _phone(){
      return this.phone;
  }
  set _phone(phone){
      this.phone = phone;
  }
  get _first_name(){
      return this.first_name;
  }
  set _first_name(first_name){
      this.first_name = first_name;
  }
  get _last_name(){
      return this.last_name;
  }
  set _last_name(last_name){
      this.last_name = last_name;
  }
  get _created_at(){
      return this.created_at;
  }
  set _created_at(created_at){
      this.created_at = created_at;
  }
  get _created_by(){
      return this.created_by;
  }
  set _created_by(created_by){
      this.created_by = created_by;
  }
  get _updated_at(){
      return this.updated_at;
  }
  set _updated_at(updated_at){
      this.updated_at = updated_at;
  }
  get _updated_by(){
      return this.updated_by;
  }
  set _updated_by(updated_by){
      this.updated_by = updated_by;
  }
}
export default User;

在java中,我们可以用pojo对象来做到这一点。 并使用User user = new User(arg1, arg2 ...); 在 es6 中使用上面的代码我可以做let user = new User(arg1, arg2...);

现在我可以使用

knex.insert(user).then((data) => {
}, (err) =>{
});

但是有没有更好的方法在 es6 中创建这样的对象?

我更喜欢使用普通对象,而不是将它们包装在类中。在您的示例中,您键入了 105 行代码,这些代码几乎什么都不做。而且使用原始数据比围绕它的抽象数据要容易得多。

所以基本上我的食谱是:

  • 使用数据对象的类/包装器 → 使用数据对象本身

  • get myFieldobject.myField

  • set myFieldobject.myField = myValue

你的例子变得微不足道

knex('users')
    .insert(req.body) // Or you may want to cleanup body before inserting or smth.
    .returning('*')
    .then((data) => {
        data.password = null;
        console.log('User created %j', data)
        res.json(data).status(200)
    })

最新更新