2016-07-23 13 views
0

私はアプリケーションで作業しており、MEANスタックを技術として使用しています。 AngularJSでは、CRUD操作にngResourceを使用しています。誰でも、サーバーにユーザー名とパスワードを送信し、資格情報が有効かどうかを確認するための応答を戻す方法を提案できますか? ngResourceとmongooseコードで助けが必要です。ありがとう。MEANスタックとngResourceを使用していくつかのデータを投稿し結果を得る方法

答えて

0

mean.js定型をチェックアウト: https://github.com/meanjs/mean

あなたは、彼らはかなり迅速にそれを行う方法を説明します:

moduleName.client.controller.jsは、注入されたHTTPを使用して、HTTP呼び出しを行います。ここでは、コールの例は、(それが簡単にあなたが探しているものを見るために作るために、コードにはいくつかの編集で)/modules/users/client/controllers/authentication.client.controller.jsから行われている。

AuthenticationController.$inject = ['$scope', '$state', '$http', 'Authentication']; 

function AuthenticationController($scope, $state, $http, Authentication,) { 
    ... 
    vm.authentication = Authentication; 

    $http.post('/api/auth/signup', vm.credentials).success(function (response) { 
    // If successful we assign the response to the global user model 
    vm.authentication.user = response; 

    }).error(function (response) { 
    vm.error = response.message; 
    }); 
} 

さて、この呼び出しが投稿されたに「/ API/auth/signup 'を選択します。このルートを扱うファイルは/modules/users/server/routes/auth.server.routes.jsに位置しています:あなたが見ることができるように

modules.exports = function(app) { 
    var users = require('../controllers/users.server.controller'); 
    ... 
    app.route('/api/auth/signup').post(users.signup); 
} 

、ルート(URL)を使用すると、クライアントコントローラから呼び出されたものと一致します。コントローラからの$ httpコールが$http.post()だったので、ルートエントリは一致する必要があります。上記のことが分かります。 上記のパラメータusers.signupは、さらに別のファイルのファンクションを指します。/modules/users/server/controllers/users/users.authentication.server.controller.js。これはusersモジュールの認証部分のメインコントローラーです。さて、このファイルの中に、私たちはsignup関数がエクスポートされ見ることができます。

/* note: there are global variables here, see below */ 
exports.signup = function (req, res) { 
    // For security measurement we remove the roles from the req.body object 
    delete req.body.roles; 

    // Init user and add missing fields 
    var user = new User(req.body); 
    user.provider = 'local'; 
    user.displayName = user.firstName + ' ' + user.lastName; 

    // Then save the user 
    user.save(function (err) { 
    if (err) { 
     return res.status(400).send({ 
     message: errorHandler.getErrorMessage(err) 
     }); 
    } else { 
     // Remove sensitive data before login 
     user.password = undefined; 
     user.salt = undefined; 

     req.login(user, function (err) { 
     if (err) { 
      res.status(400).send(err); 
     } else { 
      res.json(user); 
     } 
     }); 
    } 
}); 
}; 

今、多くはここで起こっているが、我々はそれを打破することができます。

req変数は$ httpが渡す投稿要求です。 res変数は、クライアントが返信する応答です。 vm.credentials$http.post('/api/auth/signup/', vm.credentials)にどのように渡されたかに注目してください。これはreq.bodyに拘束されており、サーバーコントローラからアクセスできます。

この例では、req.bodyはサーバー上に新しいユーザーを作成するために必要なデータです。これは、Userというスキーマを持つmongooseを使用して行われます。コントローラ上部のグローバルを宣言してアクセスしてください:

var mongoose = require('mongoose'), 
    User = mongoose.model('User'); 

新しいユーザーが上記のインスタンス化されていることがわかります。これは、マングースコール.save()によって保存されます。

最後に、サーバー関数は、関数に渡された変数resを使用して、クライアントの要求に応答する必要があります。ユーザーが正常に作成されると、関数呼び出し方法を参照してください

res.jsonp(user); 

これは、応答を受け取り、ローカル変数vm.authentication.user

これが役に立てば幸いにバインドし、クライアントにsuccess()です!

+1

ありがとうmtro。それは問題を完全には解決しませんが、それは多くの助けになります。 – SumantMishra

関連する問題