2017-06-29 4 views
0

私はes6でノードjsに取り組んでいます。 私はフィールドが少ないテーブルを持っています。私は、クエリ構築とdb管理のためにknex jsを使用しています。 私の疑問は、req.bodyオブジェクトをes6クラスコンストラクタに送信してフィールドを設定するにはどうすればいいですか? 例req.bodyをES6でモデル化してknex jsを使用するときにデータベース列と一致させるにはどうすればよいですか? - Javascript

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オブジェクトでこれを行うことができます。 とコードの上に使用してES6でUser user = new User(arg1, arg2 ...); を使用し、私は今let user = new User(arg1, arg2...);

は私が

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

を使用することができます。しかしES6でこのようなオブジェクトを作成するためのより良い方法があります行うことができますか?

答えて

0

私は、クラスでラップするのではなく、プレーンなオブジェクトを扱う方が好きです。あなたの例では、ほとんど何もしない105行のコードをタイプしました。また、生データを抽象化するのではなく、生データを扱うほうが簡単です。

だから基本的に私のレシピは次のとおりです。データオブジェクトの周りのクラス/ラッパーを使用した作業

  • は→データオブジェクト自体object.myField = myValue

  • get myFieldobject.myField

  • set myFieldでの作業します

そして、あなたの例では、私は私のデータベースに必要とされているプロパティのみを設定するクラスを作成している

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) 
    }) 
+0

些細になります。そのため、他のすべての追加のボディーパラメーターは新しいオブジェクトに設定されません。 –

+0

あなたは '.insert({email:req.body.email、username:req.body.username ...})'のような必要なものをいつでも選ぶことができ、広く使われているライブラリ(lodash)を使うこともできます。ピック](https://lodash.com/docs/4.17.4#pick)のように '_.pick(req.body、['email'、 'username'、...])// => {email: 'somevalue'、username: 'value'、...} ' – coockoo

関連する問題