[英]What are the proper use cases for process.nextTick in Node.js?
[英]passport.js and process.nextTick in strategy
我在nodeJS中遇到了一些新的東西: process.nextTick
在passport.js的一些策略代碼示例中,我們可以看到
passport.use(new LocalStrategy(
function (username, password, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
findByUsername(username, function (err, user) {
// ...
bcrypt.compare(password, user.password, function (err, res) {
// ...
});
})
});
}
));
但在官方文檔中,它沒有被使用。 ( http://passportjs.org/guide/username-password/ )
我的理解是process.nextTick
應該用於推遲同步堆棧以阻止事件。 但在這個戰略代碼中,沒有事件。
這樣做有什么好處?
僅在示例中顯示可以進行異步身份驗證。 在大多數情況下,您將查詢數據庫,因此它本質上是異步的。 但是,該示例只有一組硬編碼的用戶,因此nextTick
調用可用於模擬異步函數。
100%ES6正常工作,因此您可以刪除nextTick
我在服務器端使用babel和webpack來:
從“護照”進口護照;
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const manipulateUser = async (User, profile, done, token) => {
try {
const user = await User.findOne({ googleId: profile.id });
if (user) {
user.accessToken = token;
await user.save();
return done(null, user);
}
const newUser = new User();
newUser.googleId = profile.id;
newUser.name = profile.displayName;
newUser.avatar = profile.photos[0].value;
newUser.accessToken = token;
profile.emails.forEach((email) => { newUser.emails.push(email.value); });
await newUser.save();
return done(null, newUser);
} catch (err) {
console.log('err at manipulateUser passport', err);
return done(err);
}
};
const strategy = (User, config) => new GoogleStrategy({
clientID: config.googleAuth.clientID,
clientSecret: config.googleAuth.clientSecret,
callbackURL: config.googleAuth.callbackURL,
}, async (token, refreshToken, profile, done) => manipulateUser(User, profile, done, token));
export const setup = (User, config) => {
passport.use(strategy(User, config));
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.