javascript - How can I call a Sails.js controller's function from another function of the same controller? - Stack Overf

admin2025-04-19  0

Given the following Sails.js controller, how can I call its processLogin method from its processRegistration method?

Currently this results in a ReferenceError: AuthController is not defined on line 56 (AuthController.processLogin(req, res);).

If I change it to this.processLogin(req, res); I get a TypeError: Object #<Object> has no method 'processLogin'.

Similarly if I change it to just processLogin(req, res); I get ReferenceError: processLogin is not defined.

/**
 * AuthController.js 
 *
 * @description ::
 * @docs        :: !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: {}
};

I am using Sails.js 0.10.0-rc5.

Given the following Sails.js controller, how can I call its processLogin method from its processRegistration method?

Currently this results in a ReferenceError: AuthController is not defined on line 56 (AuthController.processLogin(req, res);).

If I change it to this.processLogin(req, res); I get a TypeError: Object #<Object> has no method 'processLogin'.

Similarly if I change it to just processLogin(req, res); I get ReferenceError: processLogin is not defined.

/**
 * AuthController.js 
 *
 * @description ::
 * @docs        :: http://sailsjs/#!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: {}
};

I am using Sails.js 0.10.0-rc5.

Share edited Apr 24, 2014 at 20:28 blah238 asked Apr 24, 2014 at 20:12 blah238blah238 1,8662 gold badges20 silver badges54 bronze badges 3
  • 1 try module.exports.processLogin – aembke Commented Apr 24, 2014 at 20:34
  • I think I got it (see my answer). That works too though. Thanks! – blah238 Commented Apr 24, 2014 at 20:46
  • 1 no problem. hoisting takes some getting used to. it's odd to think that you can reference an outer variable that, at first glance, hasn't been fully instantiated yet. – aembke Commented Apr 24, 2014 at 20:49
Add a ment  | 

2 Answers 2

Reset to default 2

Refactoring slightly fixed it:

/**
 * AuthController.js
 *
 * @description ::
 * @docs        :: http://sailsjs/#!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;

I had tried this previously but just didn't get the module.exports line right (did something like module.exports = { AuthController: AuthController };, which didn't work either).

I know this is old, but sails.controllers. exposes the controllers

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1745058168a282530.html

最新回复(0)