그래서 내 사용자 스키마에는 기본적으로 방금 가지고 있고 프로필 배열 (각 사용자는 여러 로그인 전략을 가질 수 있음)에 findOrCreate
을 구현하고 있습니다. 사용자가 제공된 제공자와 ID가 일치하는 프로파일을 가지고 우리가 findOrCreate
이라고하는 제공된 프로파일을 사용함으로써 사용자를 확실하게 식별 할 수 있다고 생각하면됩니다. findOrCreate
의 목표는 제공된 프로파일과 일치하는 사용자를 식별하거나 제공된 프로파일을 사용하여 새 사용자를 작성하는 것입니다. 이 함수에는 네 가지 반환 사례가 있습니다. node.js + mongoose UserSchema findOrCreate
- 오류가 발생 한
- 사용자를 찾는 데 실패하고 성공적으로 생성 한
이제 다음 코드가이를 수행한다고 생각합니다. 이 질문에 대한 나의 우려와 이유는 findOne
에 제공된 콜백이 일관되게 반환되지 않는다는 것입니다. 사용자를 쿼리하는 동안 오류가 발생하면 콜백 (...)을 반환하고 사용자를 찾으면 콜백 (...)을 반환하지만 사용자를 생성해야하는 경우 명시 적으로 반환하지 않습니다. 구원받은 결과를 반환 할 수 있습니까? 그게 내가해야 할 일 이니, 아니면 내가 가지고있는 방식대로이게 맞습니까?
코드 :
UserSchema.static('findOrCreate', function (profile, callback) {
this.findOne({ profiles: { $elemMatch: { provider: profile.provider, id: profile.id }}}, function(err, user) {
if (err)
return callback(err);
if (user)
return callback(null, user);
user = new User({
profiles: [profile]
});
user.save(function (err, user) {
if (err)
return callback(err);
return callback(null, user);
});
});
});
이 코드는 정상적으로 보입니다. 그것을 깨끗하게하는 베드로의 생각은 좋은 것이지만, 당신이 여기에있는 것은 여전히 효과가 있어야합니다. – JohnnyHK