Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将export.signup和export.signin转换为module.exports?_Javascript_Express_Ecmascript 6 - Fatal编程技术网

Javascript 如何将export.signup和export.signin转换为module.exports?

Javascript 如何将export.signup和export.signin转换为module.exports?,javascript,express,ecmascript-6,Javascript,Express,Ecmascript 6,我正在开发一个模块,用于ExpressJS的passport身份验证,我提出了这个解决方案来收集我使用的所有passport方法: // passport-controller-js exports.signup = (passport) => (req, res, next) => { // Authenticate methods ================ passport.authenticate('local-signup', function(er

我正在开发一个模块,用于ExpressJS的passport身份验证,我提出了这个解决方案来收集我使用的所有passport方法:

// passport-controller-js

exports.signup = (passport) => (req, res, next) => {    
  // Authenticate methods ================
  passport.authenticate('local-signup', function(err, user, info) {
    if (err) {
      return next(err); // will generate a 500 error
    }
    // Saving user...
    return res.send({ success : true, message : 'signup succeeded' });
  })(req, res, next);   
};

exports.signin = (passport) => (req, res, next) => {
  passport.authenticate('local-login', function(err, user, token, info) {  
    if (err) {
      return next(err); // will generate a 500 error
    }

    req.login(user, loginErr => {
      if (loginErr) {
        return next(loginErr);
      }
      return res.send({ success : true, message : 'signin succeeded' });
    });    
  })(req, res, next);
};
但由于本模块将增加添加更多策略,我想是否有办法将所有策略都放在一个模块中。导出如下:

module.exports = (passport) => {
  function signin(req, res, next) {
    passport.authenticate('local-login', function(err, user, token, info) {  
      if (err) {
        return next(err); // will generate a 500 error
      }

      req.login(user, loginErr => {
        if (loginErr) {
          return next(loginErr);
        }
        return res.send({ success : true, message : 'signin succeeded' });
      });    
    })(req, res, next);
  };
我知道这不起作用,我只是想知道是否有可能的解决方案,所以当我需要在路由器文件上使用这些方法时,例如,我可以这样做:

  // auth.js (passport is passed from index.js)
  const passportController = require('../controllers/passport-controller')(passport);
  // Process the signup form
  router.post('/signup', passportController.signup);
  router.post('/signin', passportController.signin);
而不是:

  // auth.js (passport is passed from index.js)
  const passportController = require('../controllers/passport-controller');
  // Process the signup form
  router.post('/signup', passportController.signup(passport));
  router.post('/signin', passportController.signin(passport));
正如您所看到的,这只是寻找最清晰的编码方式并使其尽可能简单的问题


非常感谢您的帮助。

听起来您想制作一个模块,导出一个返回对象的函数。其语法是

module.exports = passport => ({
  signup(req, res, next) {
    …
  },
  signin(req, res, next) {
    …
  }
});

听起来像是要创建一个模块,该模块导出一个返回对象的函数。其语法是

module.exports = passport => ({
  signup(req, res, next) {
    …
  },
  signin(req, res, next) {
    …
  }
});

删除导出函数周围的括号。同时修复
signup
signin
函数声明。@alexmac不,它确实有效,并且按照我说的做了。函数周围没有括号,
signup
signin
不是声明。工作得很好!谢谢@Bergi:)删除导出函数周围的括号。同时修复
signup
signin
函数声明。@alexmac不,它确实有效,并且按照我说的做了。函数周围没有括号,
signup
signin
不是声明。工作得很好!谢谢@Bergi:)