javascript - 如何从同一 Controller 的另一个函数调用 Sails.js Controller 的函数?

标签 javascript node.js sails.js

给定以下 Sails.js Controller ,我如何调用它的 processLogin来自其 processRegistration 的方法方法?

目前这会导致 ReferenceError: AuthController is not defined在第 56 行(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 .

最佳答案

重构稍微修复了它:

/**
 * 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 }; 的事情,这也没有用)。

关于javascript - 如何从同一 Controller 的另一个函数调用 Sails.js Controller 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278857/

相关文章:

visual-studio-2010 - node-gyp:无法打开输入文件 'kernel32.lib'

node.js - 在 Docker 容器中安装 mongo 客户端

javascript - 包含 JS 和 CSS 文件的自定义目录

node.js - 就绪检查失败 : NOAUTH Authentication required

javascript - 如何使用 Protractor promise 调用执行函数调用

javascript - 如何触发按钮的客户端和服务器端点击事件?

javascript - 单击图像显示表

javascript - 当目录名包含空格时使用 BAT 文件启动 NodeJS http-服务器

node.js - 与风 sails Controller 中的密码参数不匹配

javascript - 将 HTML(用户定义的指令)插入 View - AngularJS