Javascript 用户注册和身份验证(注册和登录)节点

Javascript 用户注册和身份验证(注册和登录)节点,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我有两种类型的用户,卖方和买方。我应该创建两个不同的API来注册和验证每种类型的用户,还是创建一个API来处理这两种用户? 另外,在创建数据库模型时,我是应该创建两个不同的集合,还是应该创建一个集合并创建一个额外的类似于字段的角色,然后用用户的相应角色填充它? 卖主和买主几乎共享所有字段,除了卖主有一个额外字段,该字段包含他们出售的物品。 哪种方法更好? 我正在使用Express和MongoDB,我还打算在前端使用Angular 任何帮助都将不胜感激,谢谢。以上问题没有严格的答案。 您可以将它们

我有两种类型的用户,卖方和买方。我应该创建两个不同的API来注册和验证每种类型的用户,还是创建一个API来处理这两种用户? 另外,在创建数据库模型时,我是应该创建两个不同的集合,还是应该创建一个集合并创建一个额外的类似于字段的角色,然后用用户的相应角色填充它? 卖主和买主几乎共享所有字段,除了卖主有一个额外字段,该字段包含他们出售的物品。 哪种方法更好? 我正在使用
Express
MongoDB
,我还打算在前端使用
Angular


任何帮助都将不胜感激,谢谢。

以上问题没有严格的答案。 您可以将它们分开—分开的API、集合—好处是将关注点分开,从长远来看,这可能有助于将来的开发,您可能希望在不干扰另一方的情况下为双方中的任何一方添加特定的内容。 同时,如果将它们放在一起,那么需要维护的代码就更少了。
从您正在构建的应用程序的长远前景来看,您/您的组织需要更多的选择。如果我必须做出选择,我会把它们分开

当你在模拟你的收藏设计时,这是一个很好的问题。你必须开始考虑你的用户,以及供应商和买家的不同。卖主和买主都是用户,但您可以拥有用户正在销售的商品的集合,以及用于区分买主和卖主的布尔值。最终,这些问题是您在编写API之前要确定的。如果您想为每个用户注册设置两个单独的API,这很好,但这完全取决于您自己

假设您决定将登录API统一为1。您可以这样定义您的用户模型。我喜欢使用Typescript来检查我使用的所有东西。我可能做得太多了,但我喜欢它

export interface User {
    id?: string; // add it as option in the case of regisration
    name: string;
    email: string;
    password?: string;
    // you can add more fields that both Vendor and Buyer would have in common.
}

export interface Vendor extends User {
    // here we define specific fields that a vendor would have that a buyer wouldn't
    selling: Array<Object>;
    isVendor: boolean; 
    revenue: number;
    // more fields here if needed
}

export interface Buyer extends User {
    // define fields that a buyer would have that a vendor wouldn't
    cart: Array<Object>; // cart items of what they are purchasing
    cartTotal: number;
    billing: string;
    // more fields here
}
导出用户界面{
id?:string;//在注册的情况下将其作为选项添加
名称:字符串;
电子邮件:字符串;
密码?:字符串;
//您可以添加供应商和买方共同拥有的更多字段。
}
导出接口供应商扩展用户{
//在这里,我们定义了一个特定的字段,一个供应商会有,一个买家不会
销售:阵列;
isVendor:boolean;
收入:数字;
//如果需要,请在此处添加更多字段
}
出口接口买方扩展用户{
//定义买方将拥有而供应商不会拥有的字段
cart:Array;//将他们正在购买的商品放入购物车
总数:个数;
计费:字符串;
//这里有更多的田地
}
在上面的代码中,用户界面定义了一个基本用户,买方和卖方界面扩展了用户界面,每个界面都添加了它们自己的字段,这些字段是这些模型所特有的

对于注册API,您只需在表单中设置一个复选框,询问用户是否是供应商。这将在供应商界面中启用布尔值,告诉您的API(您将在API代码中内部处理),发送的信息是针对供应商的。然后将基本信息保存在用户集合中,将供应商信息保存在供应商集合中,并在两者之间保留一个公用键,以供用户在搜索彼此时参考

使用登录API时,您不必在身份验证级别区分这两种API,因为用户的基本信息包含身份验证所需的字段。在呈现每个用户类型的视图时,只需检查isVendor的布尔值是否存在且为true,然后将用户路由到正确的端点

这个问题很难回答,因为有很多方法可以解决这个问题。由开发人员决定他们喜欢用哪种方式来组织一切和布局。想保持简单,为每种用户类型创建一个端点吗?去争取吧要将所有用户类型的所有身份验证合并为一个身份验证吗?那也很好