Meteor Accounts.onCreateUser清理我的代码

Meteor Accounts.onCreateUser清理我的代码,meteor,meteor-accounts,Meteor,Meteor Accounts,创建新用户帐户时,我使用Accounts.onCreateUser函数将数据插入新集合。在继续之前,我要检查插入是否已成功工作。我的代码似乎可以工作,但看起来很凌乱。我想知道是否有更干净的方法来编写这段代码 Accounts.onCreateUser((选项,用户)=>{ 如果(用户){ CandidateProfile.insert({ userId:user.\u id, firstName:options.profile.name.first, lastName:options.profi

创建新用户帐户时,我使用Accounts.onCreateUser函数将数据插入新集合。在继续之前,我要检查插入是否已成功工作。我的代码似乎可以工作,但看起来很凌乱。我想知道是否有更干净的方法来编写这段代码

Accounts.onCreateUser((选项,用户)=>{
如果(用户){
CandidateProfile.insert({
userId:user.\u id,
firstName:options.profile.name.first,
lastName:options.profile.name.last
});
var checkForNewCandidateProfile=CandidateProfile.findOne(
{userId:user.\u id},
{字段:{userId:1}}
);
变量用户ID=
checkForNewCandidateProfile&&checkForNewCandidateProfile.userId;
if(userId==user.\u id){
返回用户;
}
}
});

就我个人而言,我认为你的测试毫无意义。您不信任
插入

但好吧,你需要它

  • 确保在服务器端运行代码。仅在服务器端导入,或仅将其包装在
    if(Meteor.isServer)

  • 为什么要检查
    user
    arg是否存在?是的,这就是回调的工作原理

  • 如果出现问题,抛出错误以中止用户创建

  • 可能的变体:

    if(Meteor.isServer){
    Accounts.onCreateUser((选项,用户)=>{
    //您插入同步,因此由您来处理错误。
    试一试{
    CandidateProfile.insert({
    userId:user.\u id,
    firstName:options.profile.name.first,
    lastName:options.profile.name.last
    });
    var checkForNewCandidateProfile=CandidateProfile.findOne(
    {userId:user.\u id},
    {字段:{userId:1}}
    );
    变量用户ID=
    checkForNewCandidateProfile&&checkForNewCandidateProfile.userId;
    if(userId==user.\u id){
    返回用户;
    }
    }捕获(错误){
    抛出新错误(Error);
    }
    抛出新错误(“出了问题”);
    });
    }
    
    我有点惊讶于它的效果。好的,insert是一个异步操作,之后您将立即读取集合。我会怀疑findOne()没有找到任何东西。我真的很好奇这是怎么回事。无论如何,通过有条件地返回用户,您是说如果对集合的写入失败,您希望注册失败吗?当插入出错时,注册已经失败,并且在客户端,用户看到出现
    内部服务器错误
    。日志显示完全错误。你说你很惊讶它能工作,这是我的问题,写这篇文章的正确方法是什么?Futures可能会在这种情况下工作以提供类似同步的体验,因为onCreateUser()意味着同步工作。看看我在这里的答案:嘿@zim,你能告诉我insert是一个异步操作吗?任何引用?@bp123您能粘贴错误日志吗?插入操作不失败是至关重要的。我对编码还是新手。检查插入件是否起作用不正常吗?这很正常。当您运行异步时,您有一个带有error arg的回调来处理错误。另一方面,当同步运行某个程序时,您可以将其包装在
    try
    /
    catch
    中以处理错误。关于信任
    insert
    ,我不是100%正确。这没什么问题,可能会出现错误。