用Node.JS将一个函数的值返回给另一个函数

我正在使用MEAN堆栈的login界面。 我设法使用PassportJS来运行它。 我现在的问题是我需要一种方法让我的客户端知道login的用户是pipe理员还是用户(用户angular色)。 这些信息可以从我的MongoDB中获得。

我的API调用stream程如下:

app.post('/login', passport.authenticate('local'), authRoutes.loginCheck); 

首先,它运行passport.authenticate它调用下面的函数

 function verifyCredentials(username, password, done) // username & password from what user provide when logging in { console.log('VC'); User.findOne({username: username}, function(err, user) //query Mongo { console.log(user); // User role is available here, in JSON format if(user === null) // if no username in database, do this { console.log('Username does not exist in database'); } else { user.comparePassword(password, function(err, match) // function written to compare hashed password in Mongo & password provided by user { if(match) { done(null, {id: username, name: username}); return user; // this is not the correct syntax, but the idea is, I want to send over the user details here, so I can access the role later } else { done(null, null); } }); } }); } 

使用此语法调用verifyFunction。

 passport.use(new LocalStrategy(verifyCredentials)); 

一旦这个函数成功调用,服务器执行第二部分,它是loginCheck。

 module.exports.loginCheck = function(req, res) { console.log('Calling loginCheck route'); // I generate some sort of jwt token here // payload, body, blah blah blah ... console.log(req.body); res.json({ authenticated: req.isAuthenticated(), //built-in authentication function, returns true or false token: token // sends over token role: user.role // want to send over something like this }); // sends all these to client side as JSON } 

由于这两个函数都在不同的文件,我不清楚,如果我不得不需要的东西或只是传递一个额外的参数到loginCheck函数。 我试过后者,但没有奏效。

我能想到的一种方法是在loginCheck函数中执行另一个Mongo查询,但这样做有点多余。

即使是一个特定的关键字对我来说,谷歌肯定会有很大的帮助,因为我不知道我应该寻找什么。 原因是因为我是NodeJS的新手,所以我不熟悉大部分的术语。

我认为这些守则应该足够,但如果我需要提供更多,请告诉我,我会这样做。 提前致谢 !!

要将控制权传递给下一个匹配路由,您需要使用next作为路由中第三个parameter passing的路由:

 function verifyCredentials(req, res, next) { User.findOne({username: req.body.username}, function(err, user) //query Mongo { if(user === null) { return next(new Error('Username does not exist in database')); } else { user.comparePassword(req.body.password, function(err, match) { if(match) { next(null, {id: username, name: username}); } else { next(new Error('not match')); } }); } }); } app.post('/login', verifyCredentials, authRoutes.loginCheck);