在MEAN Stack中应请求创建用户

17 Mar 2025 | 4 分钟阅读

我们之前的章节成功地为我们的登录和注册表单创建了后端路由,并为我们的用户创建了具有适当验证的mongoose模型。 现在,我们需要在收到发送到我们新路由的请求时保存我们的用户。 当我们收到到达注册路由的新请求时,我们将使用以下步骤来创建用户。

1) 我们将回到位于routes文件夹中的js文件,并导入在之前章节中创建的用户模型。


Creating User upon Request in MEAN Stack

2) 在注册方法中,我们希望获得作为请求一部分的电子邮件和密码。 因此,我们将使用我们的模型创建一个新用户,并传递一个JavaScript对象来配置它。


Creating User upon Request in MEAN Stack

3) 我们将在此JavaScript对象中设置一个电子邮件属性,因为我们的用户模型具有电子邮件属性和密码属性。 我们将像这样设置这两个属性


Creating User upon Request in MEAN Stack

4) 设置属性的方式非常糟糕,因为我们将以未加密或原始形式存储密码。 如果有人访问我们的数据库,他可以以原始形式读取所有用户密码。 因此,我们不存储像 body.password 这样的密码。 相反,我们需要哈希我们的密码。 我们需要以无法解密的方式对其进行加密,使其无法逆转。 为此,我们将安装另一个软件包,即 bcrypt。 此软件包提供加密功能,我们可以在NodeJS中使用它。 我们将使用以下命令安装它


Creating User upon Request in MEAN Stack

5) 安装完成后,我们将其导入到我们的用户路由中使用。 现在,我们将使用它创建一个新用户。 我们将使用bcrypt包的hash()方法,该函数接受一个输入,该输入是我们想要哈希的值。


Creating User upon Request in MEAN Stack

6) 之后,我们传递加盐轮数,这意味着这里的数字越高,花费的时间就越长,但安全性越高,因为它使用数学生成一个随机数并生成哈希,这是安全的。


Creating User upon Request in MEAN Stack

在上面的代码中,我们使用了十,这足以产生一个安全的哈希值。

7) 现在,我们将获得一个回调,每当它完成时都会触发。 或者,我们链接一个promise,所以我们在这里使用then()块。 一旦完成,这个then块将产生哈希值。 我们将像这样在此then块中创建新用户


Creating User upon Request in MEAN Stack

8) 现在,对于密码,我们将不存储原始密码。 相反,我们将存储生成的哈希值,如下所示


Creating User upon Request in MEAN Stack

9) 我们已经创建了用户,现在我们将调用 save() 将用户保存到数据库。 我们将附加then块,该块将在成功时执行。 在此then块中,我们将创建一个或发送一个响应,其中我们将状态代码设置为201,因为我们创建了一个新用户,并且我们在其中发送回一些json数据,如下所示


Creating User upon Request in MEAN Stack

10) 我们还将添加catch块,因为我们尚未添加所有错误处理逻辑。 因此,在此catch块中,我们将发回状态500和一个json消息,其中包含我们的错误属性,其中包含我们收到的错误。


Creating User upon Request in MEAN Stack

现在,如果我们尝试重新启动服务器,如果您没有收到此错误,则可能会收到错误 "cyclic dependency" was detected ,则可以忽略此错误。 要解决此错误,我们将回到我们的 app.js 文件,并在该MongoDB链接到我们的后端数据库中,我们将删除 retryWrites=true&w=majority

一切看起来都不错,有了它,我们应该能够创建新用户并将它们存储在我们的数据库中。 在下一节中,我们将把angular与后端路由连接起来。