在终端,给项目安装一个模块 .. 名字是 bcrypt ,把它保存在项目的开发依赖里面 .. 一会儿会用到它去 hash 用户的密码 ..
回到 user 模块 .. 添加一个 用户注册 ... 用一下 router.post .. 地址是 /users ... 一个回调 .. 里面有 req .. res .. 还有一个 next ..
在这个方法里面,从请求的主体里拿出一些东西 .. username ... 还有 password .. 它们都来自 req 里的 body 属性 ..
创建用户的时候可以检查一下用户名是否已经存在了 .. 添加一个 user .. 结果使用 getUserByName 这个方法 .. 把用户名交给这个函数 ..
然后在上面去定义一下这个 getUserByName .. 函数接收一个 username 参数 ..
在函数里面,添加一个 result .. 用一下 db 的 get .. 得到 users 资源 .. 然后用 find ... 找到 username 是 username 参数值的用户 .. 用 value 得到这个结果 .. 最后再让这个方法返回 result ..
下面可以判断一下 .. 如果在应用里找到了同样名字的用户 .. 可以做出一个响应 .. status 设置成 409 ,表示有冲突 .. jsonp .. 用户名已经占用了! 响应之后执行一下 return ..
回到 http 客户端 .. 重新再试一下用 post 方法请求 users 资源 .. 因为请求主体里的 username 在应用里已经存在了,所以这个请求的响应的状态码是 409,还有一条信息说用户名被占用了!
回到项目继续再编辑这个中间件 ..
如果用户名不存在 .. 可以用一下 bcrypt 上的 hash .. 处理一下 password .. saltRounds 设置成 10 ..
用一个 then .. 得到的结果可以叫它 passwordHash .. 在这个回调里面 .. 修改一下 req.body 里的 password .. 让它等于 hash 之后的密码 .. 这里就是 passwordHash ..
然后再执行一下 next() 继续执行其它的中间件 ..
在文件顶部 .. 导入 bcrypt .. 来自 bcrypt 模块 ..
打开 db.json .. 删除掉 users 里的这个用户 .. 重新再去运行一下服务 ..
回到 http 客户端 .. 重新执行一下这个请求 .. 成功创建了这个用户资源 .. 这次你会发现,用户的密码会是使用 bcrypt hash 之后的密码 ..