2017-03-10 5 views
0

TypeError例外:newUser.saveは拡散演算子でプロパティを割り当てる前(createNew機能で)機能プロパティを割り当てた後にsaveが関数ではないのはなぜですか?

ない、userModelオブジェクトは、機能を保存している(マングースによって設計されるように)、機能を割り当てるが後もうアクセスできません。誰かがこれがなぜで、どうやってそれを回避するのか説明できますか?

const mongoose = require('mongoose') 

const UserSchema = new mongoose.Schema({ 
    facebookid: String, 
    firstname: String, 
    lastname: String, 
    email: String, 
    timezone: Number, 
    gender: String, 
    invitationid: String, 
    referralid: String, 
    locale: String, 
    stage: String 
}) 

const User = mongoose.model('User', UserSchema) 

const createUser =() => new User() 

module.exports = { 
    createNew : userInfo => { 

    const userModel = createUser() 

    const newUser = { ...userModel, 
     facebookid: userInfo.fid, 
     firstname: userInfo.first_name, 
     lastname: userInfo.last_name, 
     locale: userInfo.locale, 
     timezone: userInfo.timezone, 
     gender: userInfo.gender, 
     invitationid: userInfo.invitationid, 
     referralid: userInfo.referralid, 
     stage: 'NA' 
    } 
    return newUser.save() 
    } 
} 

ありがとうございます! メイト

答えて

1

新しいユーザーを作成しながら、あなたがオブジェクトを渡すことができます: - 今userModelがで返されるユーザーが含まれてい

module.exports = { 
createNew : userInfo => { 

const userModel = createUser({ 
    facebookid: userInfo.fid, 
    firstname: userInfo.first_name, 
    lastname: userInfo.last_name, 
    locale: userInfo.locale, 
    timezone: userInfo.timezone, 
    gender: userInfo.gender, 
    invitationid: userInfo.invitationid, 
    referralid: userInfo.referralid, 
    stage: 'NA' 
}) 

return userModel.save() 
} 
} 

そして

createUser = (user) => new User(user) 

を変更しますmongoose ormとsave関数にアクセスすることができます。あなたがmonによって返されたユーザーオブジェクトを使用していなかったガチョウは、あなたがプレーンなオブジェクトUserインスタンスの直接のプロパティをコピーしている{...userModel}に問題なく可能な解決策

について、ちょうど詳細と新しいもの

+0

私はコンストラクタのそのパラメータを知らなかった。エレガントなソリューションと完璧に動作し、ありがとうございます! – matetukacs

1

実際にはnewUserUserオブジェクトではありません。

...userModelは、オブジェクト "自身"プロパティをプロトタイプではなくマージします。

このような何か試してみてください:

const newUser = new User({/* your user */}); 
newUser.save(); 
+0

感謝します、ありがとう! – matetukacs

0

を作成しました。拡張されたクラスから継承されたプロパティまたはメソッドは無視され、最も重要なことに、プロトタイプチェーン自体が失われます。

save()の方法はおそらくmoongooseのSchemaクラスで定義されているため、そのテクニックでそれを失います。

他の回答に提案されている解決策のいずれかが問題を解決します。

関連する問題