Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 模块.从承诺导出_Javascript_Node.js - Fatal编程技术网

Javascript 模块.从承诺导出

Javascript 模块.从承诺导出,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

如何将函数initPassport从turbo.then()分配给module.exports

函数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框架。有关本地策略,请参阅此处