2017-09-04 14 views
1

私はMongoDBのに新しいユーザーを追加し、最後にJSONとしてUserオブジェクトを返す必要があり、私の帆1.0アプリケーションでの機能を持っている...Sails.JS - 作成したユーザー文句を言わないリターンユーザーオブジェクト

ユーザーはコレクションに追加されますが、新しいUserオブジェクトの_idを取得しようとするとエラーが発生します。 createdUserをconsole.log()にしようとすると、Undefinedとして返されます。ユーザーがMongoでどのように作成されるのかを理解しようとしましたが、同じ関数内でオブジェクトとして返されませんでしたか?

要するにレジスタ()関数は、以下のん:

  • は、有効な電子メールアドレス
  • ため
  • チェックが
  • 適用を挿入した場合、パスワード
  • はグラバターURLを検索し暗号化し、いくつかの入力を検証しますユーザーを収集する
  • req.sessionにuser._idを設定します(エラーは発生していません)
  • 01私はcreatedUserをCONSOLE.LOGしようとすると、それは未定義である、それはモンゴが、運があるため_idに切り替えるIDを試してみました

    info: ·• Auto-migrating... (alter) 
    info: Hold tight, this could take a moment. 
    info: ✓ Auto-migration complete. 
    
    warn: Ignored attempt to bind route (/resend-username) to unknown action :: UserController.resendUsername 
    info: 
    info:    .-..-. 
    info: 
    info: Sails    <| .-..-. 
    info: v1.0.0-37   |\ 
    info:      /|.\ 
    info:     /|| \ 
    info:     ,' |' \ 
    info:     .-'.-==|/_--' 
    info:     `--'-------' 
    info: __---___--___---___--___---___--___ 
    info: ____---___--___---___--___---___--___-__ 
    info: 
    info: Server lifted in `D:\Development\Sails\goknack-sails-1.0` 
    info: To shut down Sails, press <CTRL> + C at any time. 
    
    debug: ------------------------------------------------------- 
    debug: :: Tue Sep 05 2017 18:08:33 GMT-0500 (Central Daylight Time) 
    
    debug: Environment : development 
    debug: Port  : 1337 
    debug: ------------------------------------------------------- 
    undefined 
    D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\utils.js:123 
        process.nextTick(function() { throw err; }); 
               ^
    
    TypeError: Cannot read property '_id' of undefined 
        at D:\Development\Sails\goknack-sails-1.0\api\controllers\UserController.js:259:47 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\parley\lib\private\Deferred.js:232:16 
        at _afterTalkingToAdapter (D:\Development\Sails\goknack-sails-1.0\node_modules\waterline\lib\waterline\methods\create.js:282:22) 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\do-with-connection.js:223:16 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\do-with-connection.js:123:18 
        at Object.success (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\build-std-adapter-method.js:61:47) 
        at afterMaybeArtificiallyWaiting (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:406:21) 
        at maybeArtificiallyWait (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:220:20) 
        at afterPotentiallyCaching (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:240:11) 
        at _cacheIfAppropriate (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:98:18) 
        at Function._interceptExit [as success] (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:111:9) 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\machines\create-record.js:99:22 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\collection.js:437:18 
        at handleCallback (D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\utils.js:120:56) 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\collection.js:743:5 
        at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb-core\lib\connection\pool.js:461:18 
              ^
    

  • 戻りユーザオブジェクトエラー

JSONとして。

レコードがデータベースに作成されています...私がどこにいてもうまくいかない場合の助けに感謝します。

enter image description here

私が使用していますフルレジスタ機能:

register: function (req, res) { 

    if (_.isUndefined(req.param('first'))) { 
     return res.badRequest('A first name is required!'); 
    } 

    if (_.isUndefined(req.param('last'))) { 
     return res.badRequest('A last name is required!'); 
    } 

    if (_.isUndefined(req.param('phone'))) { 
     return res.badRequest('A phone number is required!'); 
    } 

    if (_.isUndefined(req.param('email'))) { 
     return res.badRequest('An email address is required!'); 
    } 

    if (req.param('email') !== req.param('emailConfirm')) { 
     return res.badRequest('Email addresses do not match!'); 
    } 

    if (_.isUndefined(req.param('password'))) { 
     return res.badRequest('A password is required!'); 
    } 

    if (req.param('password').length < 6) { 
     return res.badRequest('Password must be at least 6 characters!'); 
    } 

    if (req.param('password') !== req.param('confirmPassword')) { 
     return res.badRequest('Passwords do not match!'); 
    } 

    if (_.isUndefined(req.param('tos'))) { 
     return res.badRequest('You must review and accept the Goknack Terms of Service & Privacy policy.'); 
    } 



    Emailaddresses.validate({ 
     string: req.param('email'), 
    }).exec({ 
     // An unexpected error occurred. 
     error: function (err) { 
     return res.serverError(err); 
     }, 
     // The provided string is not an email address. 
     invalid: function() { 
     return res.badRequest('Doesn\'t look like an email address to me!'); 
     }, 
     // OK. 
     success: function() { 

     Passwords.encryptPassword({ 
      password: req.param('password'), 
     }).exec({ 

      error: function (err) { 
      return res.serverError(err); 
      }, 

      success: function (result) { 

      var options = {}; 

      // gravitar image for user, if present 
      try { 

       options.gravatarURL = Gravatar.getImageUrl({ 
       emailAddress: req.param('email') 
       }).execSync(); 

      } catch (err) { 
       return res.serverError(err); 
      } 

      options.email = req.param('email'); 
      options.username = req.param('username'); 
      options.encryptedPassword = result; 
      options.deleted = false; 
      options.deletedDate = ''; 
      options.admin = false; 
      options.banned = false; 
      options.paypalEmail = ''; 


      // validate that email address has not been used before 
      User.find({email: req.param('email')}).exec(function(err, user) { 
       if (err) { 
       return res.negotiate(err); 
       } 

       if (user.length > 0) { 
       return res.badRequest('Invalid email, this email address is already in use.'); 
       } else { 
       // create new user 
       User.create(options).exec(function (err, createdUser) { 

        if (err) { 
        console.log('the error is: ', err.invalidAttributes); 
        return res.negotiate(err); 
        } 

        // Log the user in 
        console.log(createdUser); 
        req.session.userId = createdUser._id; 

        // NOTHING IS BEING RETURNED IN createdUser 

        return res.json(createdUser); 
       }); 

       } 
      }); 

      } 
     }); 
     } 
    }); 
    }, 
+0

@arbuthnottの後に質問を少し書き直して、User.find()構文の問題を解決してください。私は今あなたの質問の主な要点に従うことができないように感じる。このことを解決するのを手助けしたいと思います。私は大きなSailsJSサポーターです –

+0

こんにちはZach、私は新しいユーザーを作成しようとすると、そのオブジェクトを返そうとしているときに起こっていることをより明確にするために少し質問を改めました。 find()メソッドの更新は既に適用されています。 登録メソッドの最後に、ユーザーIDをreq.session.userIdに設定しようとしていますが、これは単純なconsole.log()と一緒に運のない状態です。 – xXPhenom22Xx

+0

Register関数が何をしているのかについてのコメントをいくつか追加しました。助けてくれてありがとうございます。 – xXPhenom22Xx

答えて

関連する問題