有什么方法可以重构这段代码吗?
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;
}
}
我想重构这段代码,这样我就可以将整个数据库查询逻辑放在一个不同的文件中,只调用这个文件中的函数,我该怎么做?
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;
}
}