一、引言

在数据库和静态页面都创建好之后,下面就该接着完成后台Node.js监听注册和登录的部分了。这个部分主要使用的技术是:Node.js的Express框架和ajax异步请求。登录和注册的代码实现过程基本相同,现在重点以注册监听为例进行叙述。

二、js文件-功能实现

  • 在注册按钮<input......>中添加id:bg-register,提供监听接口,然后在js/register.js文件中监听“注册”按钮的单击事件,并使用ajax将客户端数据异步提交给服务器
<div class="form-group">
<div class="col-sm-5 col-sm-offset-2">
<input id="bt-register" class="btn btn-success btn-block" type="button" value="注册">
</div>
</div> <script src="js/register.js"></script>
//监听“注册”按钮的单击事件
$('#bt-register').click(function(){
var n = $('#uname').val();//用户名
var p = $('#upwd').val();//密码
//将客户端数据异步提交给服务器
$.ajax({
type:'POST',
url:'/user/register',
data:{uname:n,upwd:p},
success:function(result){
if(result.code===1){
alert('注册成功!3s后自动跳转到登录页面...')
setTimeout(function(){
location.href='login.html';
},3000);
}else{
alert('注册失败!请稍后重试!')
}
},
error:function(result){}
})
});
  • 找到主程序app.js,向客户端提供动态资源的响应
/*整个项目的主模块文件:
* 负责创建web服务器对象,监听指定端口
* 并向客户端提供静态资源+动态资源服务*/ //mysql连接数据库会另建模块对应订单等页面,
//这里主模块只负责创建web服务器
const http = require('http');
const express = require('express');
const user = require('./user'); var app = express();//请求处理函数
http.createServer(app).listen(8080); //向客户端提供静态资源的响应
app.use(express.static('public')); //向客户端提供动态资源的响应
app.post('/user/register',user.register);
app.post('/user/login',user.login);
  • 在app.js同级目录,创建自定义模块use.js,向外提供login()和register()两个请求处理函数,并且接收客户端POST提交的请求数据:uname、upwd保存入数据库,向客户端返回JSON字符串
/**用户相关功能模块
* 向外提供
* login()和register()
* 两个请求处理函数**/ const qs = require('querystring'); //使用qs模块解析POST数据
const pool = require('./dbpool'); //使用连接池模块获取连接 module.exports = {
//接收POST提交的请求数据:uname、upwd
//保存入数据库,返回JSON字符串,形如:
// {"code":1,"msg":"注册成功","uid":31} register:(req,res)=>{
//读取POST数据:req.on('data',(buf)=>{})
req.on('data',(buf)=>{
//解析出请求数据
var obj = qs.parse(buf.toString());
//获取数据库连接,提交SQL给数据库
pool.getConnection((err,conn)=>{
conn.query('INSERT INTO t_login VALUES (NULL,?,?)',[obj.uname,obj.upwd],(err,result)=>{
var output = {//要输出给客户端的数据
code:1,
msg:'注册成功',
uid:result.insertId
};
res.json(output);//把数据转换为JSON字符串并输出
conn.release();
})
});
})
},
login:(req,res)=>{
req.on('data',(buf)=>{
var obj = qs.parse(buf.toString());
pool.getConnection((err,conn)=>{
conn.query(
'SELECT uid FROM t_login WHERE uname=? AND upwd=?',[obj.uname,obj.upwd],
(err,result)=>{
if(result.length>0){//查询到数据了
var output = {
code:1,
msg:'登录成功',
uid:result[0].id
}
}else{//未查询到数据
var output ={
code:2,
msg:'用户名或密码错误'
}
}
res.json(output);//把数据转化为JSON
conn.release(); })
})
})
}
}
  • 因为注册和登录需要很多的数据库访问,所以在app.js同级目录下,还要再创建一个自定义数据库连接池模块dbpool.js,向外提供pool对象。
/**数据库连接池模块
* 向外提供pool对象**/
const mysql = require('mysql'); var pool = mysql.createPool({
host:'127.0.0.1',
user:'root',
password:'',
database:'jd',
port:3306,
connectionLimit:5 //连接池最大容量 一般5~10个
}); module.exports = pool;

三、测试-实现效果

只运行主执行程序app.js即可,然后在127.0.0.1:8080/.......地址端访问测试,效果如下:

数据库 t_login表中添加数据   成功:

app.js   主程序成功运行界面

用刚刚注册的账号  登录


注:转载请注明出处

【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之注册与登录监听的更多相关文章

  1. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之功能与数据分析

    一.引言 在学习了Nodejs和HTML5之后,发现了Nodejs的使用很方便,和php是完全不同的另一种后台语言.我也明白了,在一个项目里,是不可能同时存在Apach服务器(php)和Web服务器( ...

  2. 【京东个人中心】——Nodejs/Ajax/HTML5/Mysql爬坑之静态页面

    一.引言 接着上一篇,京东个人中心的所有功能数据分析完成之后,现在需要把静态页面完成,实现过程中要用到的技术有:Bootstrap.html5表单新特性等.除此之外,还要利用Node.js的Expre ...

  3. centos7安装Mysql爬坑记录

    centos7安装Mysql爬坑记录   查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装 ...

  4. 日均5亿查询量的京东订单中心,为什么舍MySQL用ES?

    阅读本文大概需要 8 分钟. 来源:京东技术订阅号(ID:jingdongjishu) 作者:张sir   京东到家订单中心系统业务中,无论是外部商家的订单生产,或是内部上下游系统的依赖,订单查询的调 ...

  5. 【唯星宠物】——BootStrap/Mysql/PHP/Ajax爬坑之正则验证登录注册子页

    前言:唯星宠物产品官网的登录注册,单独一个子页,页面使用BootStrap实现响应式,PHP提供服务端,利用Ajax技术,从Mysql中获取JSON数据,并对表单信息进行正则验证.项目github地址 ...

  6. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST API,就能够很容易地构建一个增删查改应用.这个应用始终遗留了一个问题,Web App在访问REST AP ...

  7. Vue.js——使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    转自:https://www.cnblogs.com/keepfool/p/5665953.html 概述 上一篇我们介绍了如何使用vue resource处理HTTP请求,结合服务端的REST AP ...

  8. 阿里云服务器centos7环境下安装xampp后,mysql有进程,但是却没有监听3306端口

    配置阿里云服务器centos7中xampp环境时出现了一种情况: 在centos中可以使用命令进入mysql 修改后也可以远程用phpmyadmin连接mysql 但是用navicat却无法连接 先修 ...

  9. HTML5 浏览器返回按钮/手机返回按钮事件监听

    1.HTML5  History对象 支持使用pushState()方法修改地址栏地址,而不刷新页面. popstate事件 当history实体被改变时,popstate事件将会发生.调用pushS ...

随机推荐

  1. [js高手之路]深入浅出webpack教程系列7-( babel-loader,css-loader,style-loader)的用法

    什么是loader呢,官方解释为文件的预处理器,通俗点说webpack在处理静态资源的时候,需要加载各种loader,比如,html文件,要用html-loader, css文件要用css-loade ...

  2. 向eclipse的JavaWeb项目中导入jar包--备忘录

    一:      在你所需的jar包网站下载对应的jar包.如org.apache.commons.lang.jar. 二:复制粘贴到该JavaWeb的WEB-INF目录下的lib目录下,如: 三:右键 ...

  3. fetch的使用说明

    1.RN官方文档中,可使用XMLHttpRequest var request = new XMLHttpRequest(); request.onreadystatechange = (e) =&g ...

  4. NHibernate教程(18)--对象状态

    本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...

  5. Web云笔记--CSS

    CSS CSS CSS Web自学第二阶段之CSS 参考资料:<Head First HTML&CSS>(中文第二版)(美国)弗里昂ISBN:9787508356464 中国电力出 ...

  6. bgp选路原则【第二部】

    面向逻辑谈bgp选路原则(第二部) 终于到了BGP终极解析的第二部曲--BGP选路原则.与题目相呼应,我不会直接介绍选路原则的规则,而是从时间逻辑和空间逻辑上将所有的选路原则分层分类.因为只有从这种角 ...

  7. 学会Git

    学会Git   目录 一.版本控制概要 1.1.什么是版本控制 1.2.常用术语 1.3.常见的版本控制器 1.4.版本控制分类 1.4.1.本地版本控制 1.4.2.集中版本控制 1.4.3.分布式 ...

  8. Squid代理服务器安装

    代理服务器的功能是代替网络用户去访问网络信息,并把获得的信息返回给用户,其工作步骤大致如下: ) 客户机向代理服务器发起访问互联网的请求 ) 代理服务器收到请求后检查请求是否被允许,如果允许将会进行下 ...

  9. JS内置对象-自定义对象

    1.基本概念: ①对象:对象是拥有一系列无序属性和方法的集合. ②键值对:对象中的数据是以键值对的形式存在,对象的每个属性和方法,都对应值一个键名,以键取值. ③属性:描述对象特征的一系列变量称为属性 ...

  10. Java计算器1.0版

    此版本只是设计了页面,还没有实现事件监听   代码: package com.niit.javagui; import java.awt.Button; import java.awt.FlowLay ...