Javascript 模块.从承诺导出
如何将函数initPassport从turbo.then()分配给module.exportsJavascript 模块.从承诺导出,javascript,node.js,Javascript,Node.js,如何将函数initPassport从turbo.then()分配给module.exports 函数turbo(){ 返回新承诺(功能(解决、拒绝){ UsersModel.find({ 用户名:“大黄蜂” },函数(err,userMongo){ userMongo.forEach(函数(一){ 决心({ 用户名:1.username, 密码:1.密码 }); }); }); }); } turbo.then(功能(数据){ var用户=数据; 函数initPassport(){ passp
函数turbo(){
返回新承诺(功能(解决、拒绝){
UsersModel.find({
用户名:“大黄蜂”
},函数(err,userMongo){
userMongo.forEach(函数(一){
决心({
用户名:1.username,
密码:1.密码
});
});
});
});
}
turbo.then(功能(数据){
var用户=数据;
函数initPassport(){
passport.use(新本地策略)(
函数(用户名、密码、完成){
findUser(用户名、函数(错误、用户){
如果(错误){
返回完成(err);
}
如果(!用户){
返回完成(null,false);
}
如果(密码!==用户密码){
返回完成(null,false);
}
返回完成(空,用户);
});
}
));
passport.authenticationMiddleware=authenticationMiddleware;
}
});
module.exports=代码>这可以通过多种方式实现,我将在下面强调2
方法#1
从以下行开始移动匿名函数:
turbo.then(function (data) {
要附加到turbo
功能中:
function turbo() {
return new Promise(function (resolve, reject) {
...
})
.then(function (data) {
...
});
}
然后,module.exports
可以设置为turbo
方法#2
将匿名函数移动为命名定义,例如:
function authentication(data) {
var user = data;
function initPassport() {
passport.use(new LocalStrategy(
function (username, password, done) {
findUser(username, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false);
}
if (password !== user.password) {
return done(null, false);
}
return done(null, user);
});
}
));
passport.authenticationMiddleware = authenticationMiddleware;
}
}
然后可以将module.exports
设置为以下内容:
module.exports = function () {
return turbo().then(authentication);
};
移动turbo。然后进入主功能turbo。将其重命名为。然后
function turbo() {
return new Promise(function (resolve, reject) {
UsersModel.find({
userName: 'bumblebee'
}, function (err, userMongo) {
userMongo.forEach(function (one) {
resolve({
username: one.userName,
password: one.password
});
});
});
})
.then(function (data) {
var user = data;
function initPassport() {
passport.use(new LocalStrategy(
function (username, password, done) {
findUser(username, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false);
}
if (password !== user.password) {
return done(null, false);
}
return done(null, user);
});
}
));
passport.authenticationMiddleware = authenticationMiddleware;
}
});
}
模块必须同步加载。您不能这样做。只需导出承诺本身,然后等待导入它的值。使用passport进行身份验证的方法有很多,最常见的是用作中间件来表示路由或您正在使用的任何web框架。有关本地策略,请参阅此处