2014-04-24 5 views
3

다음 Sails.js 컨트롤러가 있다면 processLogin 메서드를 processRegistration 메서드에서 어떻게 호출 할 수 있습니까?동일한 컨트롤러의 다른 기능에서 Sails.js 컨트롤러의 기능을 호출하려면 어떻게해야합니까?

현재이 결과는 온라인으로 ReferenceError: AuthController is not defined (AuthController.processLogin(req, res);)이됩니다.

this.processLogin(req, res);으로 변경하면 TypeError: Object #<Object> has no method 'processLogin'이 표시됩니다.

마찬가지로 processLogin(req, res);으로 변경하면 ReferenceError: processLogin is not defined이됩니다.

/** 
* AuthController.js 
* 
* @description :: 
* @docs  :: http://sailsjs.org/#!documentation/controllers 
*/ 

var passport = require('passport'); 

module.exports = { 
    login: function (req, res) { 
    res.view('auth/login'); 
    }, 

    processLogin: function (req, res) { 
    passport.authenticate('local', function (err, user, info) { 
     if ((err) || (!user)) { 
     res.redirect('/login'); 
     return; 
     } 
     req.logIn(user, function (err) { 
     if (err) res.redirect('/login'); 
     console.log(user); 
     console.log('user ' + user.username + ' logged in'); 
     return res.redirect('/user'); 
     }); 
    })(req, res); 
    }, 

    logout: function (req, res) { 
    var username = req.user.username; 
    req.logout(); 
    console.log('user ' + username + ' logged out'); 
    res.redirect('/login'); 
    }, 

    register: function(req,res) { 
    res.view('auth/register'); 
    }, 

    processRegistration: function(req, res) { 
    var userObj = { 
     username: req.param('username'), 
     password: req.param('password') 
    }; 

    User.create(userObj, function(err, user) { 
     if (err) { 
     console.log(err); 
     return res.redirect('/register'); 
     } 

     console.log('user ' + user.username + ' registered'); 

     // Log user in 
     AuthController.processLogin(req, res); // ReferenceError here 

    }); 
    }, 

    _config: {} 
}; 

나는 Sails.js 0.10.0-rc5을 사용 중입니다.

+1

나는 (내 대답을 참조) 나는 그것을 가지고 생각 module.exports.processLogin – aembke

+0

시도를 노출합니다. 그것도 비록 작동합니다. 감사! – blah238

+1

문제 없습니다. 호이 스팅은 익숙해 져야합니다. 언뜻보기에는 아직 완전히 인스턴스화되지 않은 외부 변수를 참조 할 수 있다고 생각하는 것이 이상합니다. – aembke

답변

2

리팩토링은 약간 고정 : 나는 이전에 이것을 시도했지만 바로 module.exports 라인 권리를하지 않았다

/** 
* AuthController.js 
* 
* @description :: 
* @docs  :: http://sailsjs.org/#!documentation/controllers 
*/ 

var passport = require('passport'); 

var AuthController = { 
    login: function(req, res) { 
    res.view('auth/login'); 
    }, 

    processLogin: function(req, res) { 
    passport.authenticate('local', function(err, user, info) { 
     if ((err) || (!user)) { 
     res.redirect('/login'); 
     return; 
     } 
     req.logIn(user, function(err) { 
     if (err) res.redirect('/login'); 
     console.log('user ' + user.username + ' logged in'); 
     return res.redirect('/user'); 
     }); 
    })(req, res); 
    }, 

    logout: function(req, res) { 
    var username = req.user.username; 
    req.logout(); 
    console.log('user ' + username + ' logged out'); 
    res.redirect('/login'); 
    }, 

    register: function(req, res) { 
    res.view('auth/register'); 
    }, 

    processRegistration: function(req, res) { 
    var userObj = { 
     username: req.param('username'), 
     password: req.param('password') 
    }; 

    User.create(userObj, function(err, user) { 
     if (err) { 
     console.log(err); 
     return res.redirect('/register'); 
     } 

     console.log('user ' + user.username + ' registered'); 

     // Log user in 
     AuthController.processLogin(req, res); 

    }); 
    } 
}; 

module.exports = AuthController; 

(중 하나가 작동하지 않았다, module.exports = { AuthController: AuthController }; 같은 것을했다).

+0

당신은 어떻게 그 길로 전화합니까? – klaudia

1

나는이 오래 알고 있지만 sails.controllers.는 컨트롤러

관련 문제