nodejs+mysql实现用户注册登录

首先给出源码下载地址:https://download.csdn.net/download/sky1679/11108893

然后改一下node文件里的用户名和密码。
启动用node view.js即可

之前用django框架写过模块化的基于python+sqlite(自带的数据库)后端。那时候就是在不同的文件里写不同的东西(为了模块化),当时也不知道为什么要这么写,以至于刚开始用node.js写不会写了,django输入某个命令记得好像是manage.py啥的可以开启服务器。而我node.js的服务器在哪呢?

这次写的依旧是传统后端渲染,但是我一开始不懂,居然写了一个html文件加js写的后端响应就以为写完了。点开html文件,并没有什么用,只是一个静态页面,没有和nodejs关联。这时候我才想起,之前都是要先启动服务器的。即运行view.js文件(nodejs中的http模块就是用来创建服务器的)。这个login.html要想关联上来,那就必须是在response中返回。当然了response肯定是不支持html文件的,所以可以先引入fs模块,把login.html读出来。

链接mysql数据库,在菜鸟教程的nodejs一章已经写的很详细了,照抄就是了。然后会碰到一个问题,就是如何列表渲染table的tr组件,毕竟数据库里的行是会变的,那就需要一个模板引擎了,还是那句话,django都把这些东西集成了,以至于你会以为本来就该是这样,但是事实上你得自己引入模板引擎。这里我用的是ejs,语法去官网上看看就行,其实就只要学两条,一条是js的逻辑,如for循环,用<% %>,另一条是变量,用<%= %>,其他的用处不大,可学可不学。

注意异步函数的问题,这里回调函数基本上第一个参数都是err,也就是错误信息,最好处理一下if(err),不然待会一报错就会自动退出服务器,这真的很烦。另外一点就是因为是异步,所以可能会先执行底下的函数,如果还想这一部分按顺序运行,把底下的函数也放到回调里面。

res.end()是必须写的,标志着响应报文的结束,如果body内容少的话,把要返回的响应报文主体全放在res.end(),不写res.write()也不是不行。

验证表单输入非空,本来想用input的required属性,但是发现,required属性必须和submit配对,只有通过submit提交的才会检测,所以自己写了js,如form1.name.value,注意这个value,form1.name只是这整个输入框,value才对应的是值,都是血的教训,console.log过后才发现错误,按下按钮后进行检测。

关于分页部分,网上是有部分代码的,但是我嫌他太冗杂了,还是自己写。固然后端一次返回一页写起来比较简单,但是每次点下一页就要刷新,麻烦。所以这部分我选择了css的样式display:none直接隐藏掉。为了让他一打开页面就执行我在 < script >中修改display的操作,我试图把js从body中提到head中,于是出现了一个问题,就是body里的html的dom树还未建立,写在head里的getElementById根本找不到对应节点。后来被迫放回body尾部,没想到并不会出现显示全部行然后才隐藏的尴尬情况。

在修改display的时候我是选择一页显示五个,但是可能最后一页不到五个,所以得自己做一下条件判断。不然会出现getElementById但是取不到Id的情况,这部分节点因为get不到,会变成null,你不能操作一个null的display,会报错。

后来又发现按了下一页之后能显示,但是td之间挤得很紧,发现问题,我之前恢复tr的display用的是block,其实要写成table-row。这一点是我学艺不精了,我自以为display就四种样式,none,block,inline,inline-block。

要求在数据库中的密码为非明文。所以就涉及到加密问题,这里我直接用了nodejs自带的某个函数,其中的md5加密。实现为,注册的时候把密码存到数据库之前先加密一次,然后要登录的时候再把密码加密一次再和数据库里的比对。这里还有一个坑,就是connection.query()的result,即使没找到任何数据库中对应的行,他也会返回空数组。所以直接用if(result)是不行的,我估摸着应该是空数组对应的布尔值也是true,于是改变成if(result.length === 0)。

还剩最后一个问题,就是得支持sql语句直接查询,有一点要说的是?后面的内容query都是会编码的,这涉及到url的编码,个人是直接先对url进行编码,这里js提供了一个encodeURIcomponent()函数进行部分编码,然后打算在后端解码。这里发现url.parse()自动就帮我解码了。console.log输出了一下,的确是这样。

基本上所有的坑我都列出来了,css样式我一点没写,毕竟这也不是什么关键的东西,各凭爱好加上去吧。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现登录注册功能需要以下步骤: 1. 创建小程序页面,包括登录页面和注册页面。在登录页面和注册页面里,设置相应的表单,分别用来输入用户名和密码。 2. 在小程序后台配置请求域名白名单,将后台服务器的域名添加进去。 3. 在后台服务器上,使用Node.js框架和Express.js库创建Web服务器。 4. 使用MySQL数据库来存储用户信息。在数据库中创建一个名为users的表,用来存储用户的信息,包括用户名和密码。 5. 在服务器端,创建路由来处理来自小程序的请求。对于注册请求,将用户输入的用户名和密码插入到users表中。对于登录请求,将用户输入的用户名和密码与users表中的记录进行比对,如果匹配成功,则返回登录成功的信息。 6. 在小程序中,使用wx.request()函数来发送请求到服务器端。对于注册请求,将用户输入的用户名和密码通过POST方法发送到服务器端。对于登录请求,将用户输入的用户名和密码通过GET方法发送到服务器端。 7. 在小程序中,使用wx.showToast()函数来显示服务器返回的信息,如注册成功、登录成功、用户名已存在等。 总结一下,实现登录注册功能需要在小程序、后台服务器和MySQL数据库三个方面进行开发。小程序主要负责前端页面展示和用户输入数据的收集,后台服务器主要负责处理用户请求和数据库操作,MySQL数据库主要负责存储用户信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值