2014-04-24 30 views
3

鉴于以下Sails.js控制器,我怎么能从其processRegistration方法调用它的processLogin方法?如何从同一控制器的另一个函数调用Sails.js控制器的函数?

当前在线56(AuthController.processLogin(req, res);)产生ReferenceError: AuthController is not defined

如果我将其更改为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

重构稍微固定它:

/** 
* 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行权(不喜欢的东西module.exports = { AuthController: AuthController };,这也不能工作)。

+0

那么你如何在路线中调用它 – klaudia

1

我知道这是旧的,但sails.controllers.公开控制器

相关问题