Javascript 如何将export.signup和export.signin转换为module.exports?
我正在开发一个模块,用于ExpressJS的passport身份验证,我提出了这个解决方案来收集我使用的所有passport方法: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
// 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:)