在MEAN Stack中应请求创建用户17 Mar 2025 | 4 分钟阅读 我们之前的章节成功地为我们的登录和注册表单创建了后端路由,并为我们的用户创建了具有适当验证的mongoose模型。 现在,我们需要在收到发送到我们新路由的请求时保存我们的用户。 当我们收到到达注册路由的新请求时,我们将使用以下步骤来创建用户。 1) 我们将回到位于routes文件夹中的js文件,并导入在之前章节中创建的用户模型。 ![]() 2) 在注册方法中,我们希望获得作为请求一部分的电子邮件和密码。 因此,我们将使用我们的模型创建一个新用户,并传递一个JavaScript对象来配置它。 ![]() 3) 我们将在此JavaScript对象中设置一个电子邮件属性,因为我们的用户模型具有电子邮件属性和密码属性。 我们将像这样设置这两个属性 ![]() 4) 设置属性的方式非常糟糕,因为我们将以未加密或原始形式存储密码。 如果有人访问我们的数据库,他可以以原始形式读取所有用户密码。 因此,我们不存储像 body.password 这样的密码。 相反,我们需要哈希我们的密码。 我们需要以无法解密的方式对其进行加密,使其无法逆转。 为此,我们将安装另一个软件包,即 bcrypt。 此软件包提供加密功能,我们可以在NodeJS中使用它。 我们将使用以下命令安装它 ![]() 5) 安装完成后,我们将其导入到我们的用户路由中使用。 现在,我们将使用它创建一个新用户。 我们将使用bcrypt包的hash()方法,该函数接受一个输入,该输入是我们想要哈希的值。 ![]() 6) 之后,我们传递加盐轮数,这意味着这里的数字越高,花费的时间就越长,但安全性越高,因为它使用数学生成一个随机数并生成哈希,这是安全的。 ![]() 在上面的代码中,我们使用了十,这足以产生一个安全的哈希值。 7) 现在,我们将获得一个回调,每当它完成时都会触发。 或者,我们链接一个promise,所以我们在这里使用then()块。 一旦完成,这个then块将产生哈希值。 我们将像这样在此then块中创建新用户 ![]() 8) 现在,对于密码,我们将不存储原始密码。 相反,我们将存储生成的哈希值,如下所示 ![]() 9) 我们已经创建了用户,现在我们将调用 save() 将用户保存到数据库。 我们将附加then块,该块将在成功时执行。 在此then块中,我们将创建一个或发送一个响应,其中我们将状态代码设置为201,因为我们创建了一个新用户,并且我们在其中发送回一些json数据,如下所示 ![]() 10) 我们还将添加catch块,因为我们尚未添加所有错误处理逻辑。 因此,在此catch块中,我们将发回状态500和一个json消息,其中包含我们的错误属性,其中包含我们收到的错误。 ![]() 现在,如果我们尝试重新启动服务器,如果您没有收到此错误,则可能会收到错误 "cyclic dependency" was detected ,则可以忽略此错误。 要解决此错误,我们将回到我们的 app.js 文件,并在该MongoDB链接到我们的后端数据库中,我们将删除 retryWrites=true&w=majority。 一切看起来都不错,有了它,我们应该能够创建新用户并将它们存储在我们的数据库中。 在下一节中,我们将把angular与后端路由连接起来。 |
我们请求您订阅我们的新闻通讯以获取最新更新。