有什么方法可以重构这段代码吗?

Is there a way I could refactor this Code?

我想重构这段代码,这样我就可以将整个数据库查询逻辑放在一个不同的文件中,只调用这个文件中的函数,我该怎么做?

passport.use(
    new GoogleStrategy({
       clientID: googleId,
       clientSecret: clientSecret,
       callbackURL: 'http://localhost:5000/auth/google/callback',
      
    }, (accessToken, refreshToken, profile, done)=> {
         User.findOne({googleid:profile.id}).then((currentUser)=>{
             if(currentUser){
                 console.log(`current User: ${currentUser}`)
                 done(null,currentUser)
             }else{
                new User ({
                    name:profile.displayName,
                    googleid:profile.id
                }).save().then((user) => {console.log(`newly created user: ${user}`); done(null, user)})
             }
         })
       
         
      })
    )

您可以将数据库代码放在一个单独的模块中,在该模块中导出要在策略中使用的函数,然后此策略文件可以导入该函数并在 GoogleStrategy 实现中使用它。

这就是 nodejs 中使用模块组织代码的方式。

这是您分离代码的一种方法:

import { processUser } from "./db-helper.js";

passport.use(
    new GoogleStrategy({
        clientID: googleId,
        clientSecret: clientSecret,
        callbackURL: 'http://localhost:5000/auth/google/callback',

    }, (accessToken, refreshToken, profile, done) => {
        processUser(profile).then(user => {
            done(null, user);
        }).catch(done);
    });
);

然后在db-helper.js

export async function processUser(profile) {
    const currentUser = await User.findOne({ googleid: profile.id });
    if (currentUser) {
        console.log(`current User: ${currentUser}`)
        return currentUser;
    } else {
        const user = await new User({
            name: profile.displayName,
            googleid: profile.id
        }).save();
        console.log(`newly created user: ${user}`);
        return user;
    }
}