1创建连接池对象

2导出连接池对象

 /**
* 1.引入mysql模块
* 2.创建连接池对象
* 3.导出连接池对象
*/
const mysql = require('mysql');
var pool = mysql.createPool({
host:'localhost',
port:'3306',
user:'xxx',
password:'xxx',
database:'xxx',
connectionLimit:20
});
module.exports = pool;

1托管静态资源到public

2使用body-parser中间件

3使用路由器挂在到指定的位置

 //引入express模块
const express = require('express');
//引入路由器
const userRouter = require('./routes/user.js');
const productRouter = require('./routes/product.js');
const myproRouter = require('./routes/mypro.js');
const demoRouter = require('./routes/demo.js');
const bodyParser = require('body-parser');
//创建web服务器
var server = express();
//监听端口
server.listen(8080);
//托管静态资源
server.use(express.static('public'));
server.use(express.static('ajaxdemo'));
server.use(express.static('mypro'));
server.use(express.static('js'));
server.use(express.static('css'));
server.use(express.static('bootstrap'));
server.use(express.static('img'));
//使用body-parser中间件
server.use(bodyParser.urlencoded({
extended:false
}));
//挂载路由器
server.use('/user',userRouter);
server.use('/demo',demoRouter);

1引入连接池模块

2创建路由器对象

3往路由器中添加路由

4在路由中使用连接池

5导出路由器

 /*
1.引入express
2.创建路由器对象
3.添加路由
4.导出路由器
5.引入连接池对象
6.将数据插入到数据库中
*/
const express = require('express');
const pool = require('../pool.js');
var router = express.Router();
//查看所有数据
router.get('/sele', (req, res) => {
//验证数据是否为空
var obj = req.query;
//console.log('query',obj);
for(var key in obj) {
if(!obj[key]) {
res.send('数据不能为空');
return;
}
}
var sqlselect = 'select * from xxx';
pool.query(sqlselect,(err, result) => {
if(err) throw err;
if(result.length > 0) {
res.send(result);
}
});
});
//查看用户名
router.get('/seleUname', (req, res) => {
//验证数据是否为空
var obj = req.query;
//console.log('query',obj);
for(var key in obj) {
if(!obj[key]) {
res.send('数据不能为空');
return;
}
}
var sqlselect = 'select uname from xxx where uname = ?';
pool.query(sqlselect,[obj.uname],(err,result) => {
if(err) throw err;
if(result.length > 0) {
console.log(result.tength);
res.send('1');
}else{
res.send('0');
}
});
});
router.post('/reg', (req, res) => {
var obj = req.body;
console.log('body',obj);
for(var key in obj){
if(!obj[key]){
res.send('内容不能为空');
return;
}
}
var selectInsert = 'insert into xxx set ?';
pool.query(selectInsert, [obj], (err, result) => {
if(err) throw err;
if(result.affectedRows > 0) {
console.log(result.affectedRows)
res.send('1');
} else {
res.send('0');
console.log(result.affectedRows)
}
});
});
//导出路由器
module.exports = router;

4.html页面

 <!doctype html>
<html> <head>
<meta charset="UTF-8">
<title>Document</title>
<!--<link rel="stylesheet" type="text/css" href="/code.css" />-->
<script src="/reg.js" type="text/javascript" charset="utf-8"></script>
<script src="/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script src="/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" type="text/css" href="/bootstrap.css" />
<style type="text/css">
*{
margin: 0;
padding: 0;
}
body{
background: url(/true.png) no-repeat;
background-size: cover;
overflow-x: hidden;
overflow-y: hidden;
}
#box{
width: 700px;
height: 500px;
left: 50%;
top: 50%;
margin-left: -350px;
margin-top: -250px;
position: absolute;
}
</style>
</head> <body>
<div id="box">
<div class="container">
<div class="row clearfix">
<div class="col-md-10 column">
<form class="form-horizontal" role="form">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">UserName:</label>
<div id="uname_box" class="col-sm-6">
<input id="uname" name="uname" type="text" class="form-control" placeholder="Please enter a user name" />
</div>
<div id="p1"> </div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">UserPassword:</label>
<div class="col-sm-6">
<input id="upwd" name='upwd' type="password" class="form-control" placeholder="Please enter your user password"/>
</div>
<div id="p2"> </div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">ConfirmPassword:</label>
<div class="col-sm-6">
<input id="upwd1" name='upwd' type="password" class="form-control" placeholder="Confirm user password"/>
</div>
<div id="p3"> </div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Email:</label>
<div class="col-sm-6">
<input id="email" name="email" type="text" class="form-control" placeholder="Please enter user email"/>
</div>
<div id="p4"> </div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Tel:</label>
<div class="col-sm-6">
<input id="phone" name="phone" type="text" class="form-control" placeholder="Please enter the user's mobile phone number"/>
</div>
<div id="p5"> </div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-8">
<button id="reg" type="submit" class="btn col-lg-9 btn-info">Register</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>

5.js前端验证以及Ajax异步交互实现用户注册

 window.onload = function() {
uname.onfocus = notNull;
uname.onblur = notNull;
upwd.onfocus = notNull;
upwd.onblur = notNull;
upwd1.onfocus = notNull;
upwd1.onblur = notNull;
email.onfocus = notNull;
email.onblur = notNull;
phone.onfocus = notNull;
phone.onblur = notNull;
upwd.onfocus = passw;
upwd.onblur = passw;
upwd1.onfocus = passw;
upwd1.onblur = passw;
//声明一个全局的xhr
var xhr = new XMLHttpRequest();
var flag = true;
//验证是否为空并且用户名是否已经存在
function notNull() {
if(!uname.value) {
p1.innerHTML = '用户名不能为空';
return;
} else {
p1.innerHTML = '';
getUname(); }
if(!upwd.value) {
p2.innerHTML = '密码不能为空';
return;
} else {
p2.innerHTML = '';
}
if(!upwd1.value) {
p3.innerHTML = '确认密码不能为空';
return;
} else {
p3.innerHTML = '';
}
if(!email.value) {
p4.innerHTML = '邮箱不能为空';
return;
} else {
p4.innerHTML = '';
}
if(!phone.value) {
p5.innerHTML = '手机号不能为空';
return;
} else {
p5.innerHTML = '';
}
}
//验证用户名是否已存在
function getUname() {
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
console.log(result);
if(result === '1') {
p1.innerHTML = '用户名已存在';
//如果用户名已存在,该按钮处于禁用状态
reg.setAttribute('disabled','true');
} else {
p1.innerHTML = '';
reg.disabled = false;
}
}
}
var url = "/demo/seleUname?uname=" + uname.value;
xhr.open('get', url, true);
xhr.send(null);
}
//密码验证
function passw() {
if(upwd.value != upwd1.value) {
p3.innerHTML = '两次密码不一致';
}
} reg.onclick = function() {
//查询所有用户信息
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
console.log(JSON.parse(result));
}
}
var url = "/demo/sele";
xhr.open('get', url, true);
xhr.send(null); //执行注册
xhr.onreadystatechange = function() {
if(xhr.readyState == 4 && xhr.status == 200) {
var result = xhr.responseText;
if(flag) {
getUname();
if(result === '1') {
alert('success');
setTimeout(()=>{
location.href = 'http://localhost:8080/login_user.html';
});
} else {
alert('error');
}
} }
}
var str = "/demo/reg";
xhr.open('post', str, true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var formdata = "uname=" + uname.value + "&upwd=" + upwd.value + "&email=" + email.value + "";
xhr.send(formdata);
}
}

界面展示:

Nodejs实现用户注册的更多相关文章

  1. Nodejs使用coffeescript编写的用户注册/登陆代码(MySQL)

    记录一下,以备后用 Settings = require '../../settings.js' exports.register = (req, res) -> nick_name = req ...

  2. nodejs学习笔记三(用户注册、登录)

    1.定接口      /user 接口               输入    act=reg&user=aaa&pass=123456               输出     {& ...

  3. 基于NodeJS的秘室聊天室

    借着放假期间将NodeJS重新回顾了一下并玩了一下sketch来进行设计界面,很不错.(注:代码整理后会放到github上,请关注.) 本次聊天室我给它定义了一个名称叫“秘密聊天室”. 需求: 技术选 ...

  4. NodeJS 模块开发及发布详解

    NodeJS 是一门年轻的语言,扩展模块并不太全,经常我们想用某个模块但是却找不到合适的.比如前两天我需要使用hmac和sha1来做签名,就没有找到一个比较好用的模块,这时候就需要我们自己来实现相应的 ...

  5. 大熊君大话NodeJS之------基于Connect中间件的小应用(Bigbear记事本应用之第一篇)

    一,开篇分析 大家好哦,大熊君又来了,昨天因为有点个人的事没有写博客,今天又出来了一篇,这篇主要是写一个记事本的小应用,前面的文章, 我也介绍过“Connect”中间件的使用以及“Mongodb”的用 ...

  6. nodeJS---express4+passport实现用户注册登录验证

    网上有很多关于passport模块使用方法的介绍,不过基本上都是基于express3的,本文介绍在express4框架中使用passport模块. 前言 passport是一个功能单一,但非常强大的一 ...

  7. 基于Cloud Foundry平台部署nodejs项目上线

    Cloud Foundry(以下简称CF),CF是Vmware公司的PaaS服务平台,Paas(Platform as a Service,平台即服务), 是为开发者提供一个应用运行的平台,有了这人平 ...

  8. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  9. NodeJs开发的CLI——与telnet进行通信的聊天程序

    前言: (在NodeJs中,我们想要开启一个tcp协议的做法就是引入net内置对象:      const net = require('net'); ——ES6      var net = req ...

随机推荐

  1. 条件随机场CRF(二) 前向后向算法评估标记序列概率

    条件随机场CRF(一)从随机场到线性链条件随机场 条件随机场CRF(二) 前向后向算法评估标记序列概率 条件随机场CRF(三) 模型学习与维特比算法解码 在条件随机场CRF(一)中我们总结了CRF的模 ...

  2. Selenium2Lib库之界面元素交互常用关键字实战

    5.1 Select Radio Button单选按钮关键字 按F5 查看Select Radio Button关键字的说明,如下图: Select Radio Button [ group_name ...

  3. 5月第2周业务风控关注 | 央行:严禁未经授权认可的APP接入征信系统

    本文由  网易云发布. 易盾业务风控周报每周呈报值得关注的安全技术和事件,包括但不限于内容安全.移动安全.业务安全和网络安全,帮助企业提高警惕,规避这些似小实大.影响业务健康发展的安全风险. 1.央行 ...

  4. CSS伪类详情

    参考:http://blog.csdn.net/Panda_m/article/details/50084699

  5. __BEGIN_DECLS 和 __END_DECLS

    扩充C语言在编译的时候按照C++编译器进行统一处理,使得C++代码能够调用C编译生成的中间代码. 由于C语言的头文件可能被不同类型的编译器读取,因此写C语言的头文件必须慎重. 我们编写代码,经常需要c ...

  6. Nginx虚拟主机

    [root@Nginx-server ~]# tar zxvf nginx-1.11.2.tar.gz [root@Nginx-server ~]# useradd -M -s /sbin/nolog ...

  7. 概率与统计推断第二讲homework

    作业目的: 体会条件独立 1.现需要设计一个根据一个人是否是学生$S$(布尔变量)和其体重$W$(连续变量)判断该人的性别$G$(布尔变量).假设在给定$G$的情况下$S$和$W$独立,且假设概率分布 ...

  8. Fastjson 专题

    JSONObject.toJSONString(Object object, SerializerFeature... features) SerializerFeature有用的一些枚举值 Quot ...

  9. 通过pycharm的Database设置进行数据库的可视化

    pycharm是一个很好的IDE,它还有一个功能直接通过这个IDE连接数据库,然后对数据库进行相关的操作,这样我们可以不用navicat for mysql这样的可视化工具了.   输入账号密码数据库 ...

  10. Java Script 读书笔记 (四) 面向对象编程

    1. 对象,属性 前面看到对象里删除属性一直疑惑,什么是对象,为什么属性可以删除, 我印象里的属性还是停留在property, 总想不明白为什么属性竟然能够删除.直到看到标准库才明白,原来对象就是py ...