创建新用户帐户时,我使用Accounts.onCreateUser函数将数据插入新集合中。我想在进行之前检查插件是否已成功工作。我的代码似乎工作,但它似乎非常混乱。我想知道是否有更简洁的方法来编写此代码。
Accounts.onCreateUser((options, user) => {
if (user) {
CandidateProfile.insert({
userId: user._id,
firstName: options.profile.name.first,
lastName: options.profile.name.last
});
var checkForNewCandidateProfile = CandidateProfile.findOne(
{ userId: user._id },
{ fields: { userId: 1 } }
);
var userId =
checkForNewCandidateProfile && checkForNewCandidateProfile.userId;
if (userId === user._id) {
return user;
}
}
});
答案 0 :(得分:0)
就我个人而言,我认为你的测试没有任何意义。你不相信insert
?
但是,你需要它。
请确保您在服务器端运行代码。仅在服务器端导入它或仅将其包装在if (Meteor.isServer)
为什么检查user
arg是否存在?这就是回调的工作方式。
如果出现问题,请抛出错误以中止用户创建。
可能的变体:
if (Meteor.isServer) {
Accounts.onCreateUser((options, user) => {
// You insert sync, so it's up to you to handle errors.
try {
CandidateProfile.insert({
userId: user._id,
firstName: options.profile.name.first,
lastName: options.profile.name.last
});
var checkForNewCandidateProfile = CandidateProfile.findOne(
{ userId: user._id },
{ fields: { userId: 1 } }
);
var userId =
checkForNewCandidateProfile && checkForNewCandidateProfile.userId;
if (userId === user._id) {
return user;
}
} catch (error) {
throw new Error(error);
}
throw new Error("Something's wrong.");
});
}