有了postgresql就可以不用server.js里面写的数据库了
建立数据库
建立一个叫smart-brain的数据库。

首先user表,每个id为主键且连续的,邮件不可重复,还有加入的日期。目前而言不把密码加入user表中

然后是login 表格,密码会用hash来存储

连接数据库
我们会使用到KNEXJS来链接数据库。可参考https://knexjs.org/



\d可以看到已经的表和用户,密码默认为空

SELECT 操作
直接console.log会返回所有的信息,实际我们只需要user里面的数据,所以要用到then

之前加了.then()一直报错(node:2720) UnhandledPromiseRejectionWarning:
实际是因为服务器和表的用户不同,将表的用户也改成postgres就有结果了。


用户注册
如果由用户注册,要将用户信息insert into users表中。

将request的body插入表中,其中id和entries是自动生成的可以不管

用POSTMAN进行测试

插入成功

可以加一个return(’*’)返回所有的数据,并且response为插入的内容。

再加一个catch().,如果用相同的邮箱注册就会报错


测试前端是否可行,输入用户ade,确认可以跳转home页面并显示名字

然而如果注册相同用户也会跳转,会报错,但是不会返回名字。在最后一个部分,把sign.js和register.js调整之后,报错就不会跳转了
Getting User Profiles
报错端口占用,把原来3001改成3002

在server.js里面直接用SELECT指令查找登陆的用户,并返回用户信息,如果返回空数组,.catch()里面依旧不会报错,所以要加一个if else。

Updating entries
/image里面每次发送id后,该用户的entries要加一。本来应该用update的 但实际用increment()更方便

SIGN IN
目前Login表中什么都没有,所以在register时候,要把login的email和密码都放进去。
密码不能直接放,所以用bcrypt

然后涉及到TRANSACTION(事务),在事务顺序中先把login中email和密码放进去,id会自动生成。然后返回email,在将email等信息插入user表中。值得注意的是,后来事务要commit和rollback才能生效。
因为之前在users中插入了很多用户,导致users和login中自动生成的ID不一样,如果把两者都清空,ID会是一样的

Sign in登陆进去要根据邮箱找到login对应的hash,然后用bcrypt.compareSync比较输入的密码和hash是否对得上,如果能够对上,返回users里面的用户数据,如果不能,就返回error 400
而且,必要时要加return,不然结果不会返回。

整合所有
目前的问题是如果我们登录一个不存在的用户,界面依旧会跳转到home界面,即使response返回的是400。
找到前端的signin.js,server.js里面sign in会返回用户的所有信息,检查如果用户的id不存在,那么就无法登陆进去

register同理,检查用户id,如果重复注册就没有办法登陆进去。

至此为止这个SMART BRAIN网站就完成了。
本文介绍如何使用PostgreSQL和KnexJS构建SmartBrain应用,包括创建数据库表、实现用户注册与登录功能、处理前端交互及错误反馈等关键步骤。

被折叠的 条评论
为什么被折叠?



