Nodejs学习总结 -Express 登录注册示例(二)
项目创建后,我们来做个登录注册实例,详细操作步骤如下。
1、新建项目demo ,具体操作步骤参考上一章内容
https://www.cnblogs.com/Anlycp/
2、添加mysql和session包
- package.json dependencies中添加下面内容后输入npm install进行安装
"mysql": "latest",
"express-session" : "latest",
- 输入下面语句进行和上面功能相同(多个安装包空格隔开)
npm install mysql express-session –save
3、app.js 添加session配置
var session = require('express-session');
// 设置 Session
//位置必须写在app.use('/', routes);前,否则下面中req.session.user 赋值时会报 TypeError: Cannot set property 'user' of undefined错误
app.use(session({
secret: '12345',
name: 'demo', //这里的name值得是cookie的name,默认cookie的name是:connect.sid
cookie: {maxAge: 80000 }, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
resave: false,
saveUninitialized: true,
}));
4、创建数据库及用户表
CREATE DATABASE IF NOT EXISTS nodedb CHARACTER SET UTF8; USE nodedb; SET FOREIGN_KEY_CHECKS=0; DROP TABLE IF EXISTS `userinfo`; CREATE TABLE `userinfo` (
`userid` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(64) NOT NULL COMMENT '用户名',
`userpwd` varchar(64) NOT NULL COMMENT '用户密码',
PRIMARY KEY (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';
5、新建models文件夹,创建user.js文件 用户数据库连接池连接及用户登录注册方法
var mysql = require('mysql');
var DB_NAME= 'nodedb';
//创建连接池 createPool(Object)
// Object和createConnection参数相同。
var pool = mysql.createPool({
host : '127.0.0.1',
user : 'root',
password :'caip',
database:'nodedb',
port : 3306
});
//可以监听connection事件,并设置session值
pool.on('connnection',function(connection){
console.log("pool on");
connection.query('SET SESSION auto_increment_increment=1')
});
function User(user){
this.username = user.username;
this.userpwd = user.userpwd;
}
User.prototype.userSave = function save(callback){
var user = {
username : this.username,
userpwd : this.userpwd
};
var INSERT_USER= "INSERT INTO USERINFO (USERID,USERNAME,USERPWD) VALUES (0,?,?)";
pool.getConnection(function(err,connection){
connection.query(INSERT_User,[user.username,user.userpwd],function(err,result){
if(err){
console.log("INSERT_USER Error: " + err.message);
return;
}
connection.release();
callback(err,result);
});
});
};
//根据用户名得到用户数量
User.prototype.userNum = function(username, callback) {
pool.getConnection(function(err,connection){
console.log("getConnection");
console.log("getUserNumByName");
var SELECT_NUM = "SELECT COUNT(1) AS num FROM USERINFO WHERE USERNAME = ?";
connection.query(QUERY_Num, [username], function (err, result) {
if (err) {
console.log("SELECT_NUM Error: " + err.message);
return;
}
connection.release();
callback(err,result);
});
});
};
User.prototype.userInfo = function(callback){
var user = {
username : this.username,
userpwd : this.userpwd
};
var SELECT_LOGIN ="SELECT * FROM USERINFO WHERE USERNAME = ?";
pool.getConnection(function(err,connection){
connection.query(QUERY_LOGIN,[user.username],function(err,result){
if (err) {
console.log("SELECT_LOGIN Error: " + err.message);
return;
}
connection.release();
callback(err,result);
});
});
}
module.exports = User;
6、页面目录及详细代码
index 登录及注册链接跳转
main 登录成功系统界面 调用session显示登录用户信息
regist 注册

index.html
<!DOCTYPE html>
<html>
<head>
<title>登录界面</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/" method="post">
<div class="form-group">
<div class="form-name left">
<label>用户名</label>
</div>
<input type="text" name="username" class="form-input left"/>
</div>
<div class="form-group">
<div class="form-name left">
<label>密码</label>
</div>
<input type="password" name="password" class="form-input left"/>
</div>
<div class="form-btn">
<input type="submit" value="登录" />
<input type="button" value="注册" onclick="getRegist()" />
</div>
<div class="form-btn">
<label class="warn"><%=errMsg %></label>
</div>
</form>
<script type="text/javascript">
function getRegist(){
location.href = "/regist";
}
</script>
</body>
</html>
index.js
var express = require('express');
var router = express.Router();
var User = require("../models/user.js");
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index',{ errMsg: '' });
});
router.post("/",function(req, res) {
//获取form表单提交的登录数据
var username = req.body.username;
var password = req.body.password;
var loginUser = new User({
username : username,
userpwd : password
});
//通过用户名取到用户信息
loginUser.userInfo(function(err,result){
if(err){
res.render('index', {errMsg: err });
return;
}
if(result == ''){
res.render('index', {errMsg: '用户不存在' });
return;
}
else{
//判断用户密码是否填写正确 演示没做加密,等有时间再加
if(result[0]['userpwd'] == password){
var user = {'username':username};
req.session.user = user;//保存用户session信息
res.redirect('/main');
}
else{
res.render('index', {errMsg: '密码有误' });
}
}
});
});
module.exports = router;
main.html
<!DOCTYPE html>
<html>
<head>
<title>系统界面</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<script src="/javascripts/jquery.min.js" type="text/javascript"></script>
</head>
<body>
欢迎 <%= username %>
</body>
main.js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
var user = req.session.user;
res.render('main', { username:user.username});
});
module.exports = router;
regist.html
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/regist" method="post">
<div class="form-group">
<div class="form-name left">
<label>用户名</label>
</div>
<input type="text" name="username" class="form-input left"/>
</div>
<div class="form-group">
<div class="form-name left">
<label>密码</label>
</div>
<input type="password" name="password" class="form-input left"/>
</div>
<div class="form-btn">
<input type="submit" value="注册" />
</div>
<div class="form-btn">
<label class="warn"><%= errMsg %></label>
</div>
<% if(locals.status=="success"){ %>
<div class="form-btn">
注册成功,请点击<a href='/' >登录</a>
</div>
<%} %>
</form>
</body>
</html>
regist.js
var express = require('express');
var router = express.Router();
var User = require("../models/user.js");
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('regist', {errMsg:""});
});
router.post('/',function(req, res) {
var username = req.body.username;
var password = req.body.password;
var newUser = new User({
username : username,
userpwd : password
});
//检查用户名是否已经存在
newUser.userNum(newUser.username, function (err, results) {
if (results != null && results[0]['num'] > 0) {
err = '用户名已存在';
}
if (err) {
res.render('regist', {errMsg: err });
return;
}
newUser.userSave(function(err,result){
if(err){
res.render('regist', {errMsg: err });
return;
}
if(result.insertId > 0){
res.locals.status = "success";
res.render('regist', {errMsg:'' });
}
else{
res.render('regist', {errMsg: err });
}
});
});
});
module.exports = router;
代码下载地址:
http://download.csdn.net/detail/caiping07/9618977
Nodejs学习总结 -Express 登录注册示例(二)的更多相关文章
- 使用Struts2搭建登录注册示例
使用Struts2来搭建mvc网站框架还是比较容易的,Struts2提供了各项辅助功能,保证了web开发的快速方便.下面使用struts2来搭建一个登录注册示例. 0 项目结构截图 1 搭建Strut ...
- nodejs 学习(4) express+mongoose
一.关于安装和启动: 1.设置环境变量:D:\Program Files\MongoDB\bin 2.启动时需要cd到bin 目录,然后 mongod --dbpath "D:\mongdb ...
- Nodejs学习总结 -Express入门(一)
Express是基于Node.js平台开发的Web应用开发框架,下面我们入手学习. 官网 : http://www.expressjs.com.cn/ github:https://github.co ...
- nodejs 学习六 express 三种查询url参数方法
req.param() 是被废弃的api req.params 俗点:取带冒号的参数 req.body 可以肯定的一点是req.body一定是post请求,express里依赖的中间件必须有bodyP ...
- nodejs学习(3) express+socket.io
//node var express=require('express'); var app = express(); var server = require('http').createServe ...
- nodeJs学习-07 express、body-parser;链式操作next
express和body-parser const express=require('express'); const bodyParser=require('body-parser'); var ...
- Nodejs学习笔记(七)--- Node.js + Express 构建网站简单示例
目录 前言 新建项目.建立数据库以及其它准备工作 新建express + ejs 项目:sampleEjs 创建数据库 修改package.json文件,安装session和mysql模块 样式和JQ ...
- Nodejs学习笔记(七)—Node.js + Express 构建网站简单示例
前言 上一篇学习了一些构建网站会用到的一些知识点:https://www.cnblogs.com/flyingeagle/p/9192936.html 这一篇主要结合前面讲到的知识,去构建一个较为完整 ...
- nodejs+express+mongodb实现登录注册
nodejs+express+mongodb实现登录注册 1 简介 登录注册功能使用nodejs+express+mongodb完成,其中对mongodb的操作使用mongoose完成,对mongod ...
随机推荐
- REmap首次尝试--PC端
在REchart项目中,实验此网址的内容,得到若干实例 针对此我针对北京市做了若干实验 第一:绘制北京市的填充地图 代码如下: >BJqu<-mapNames("beijing& ...
- GZIP压缩优化
使用gzip优化web应用(filter实现) 相关知识: gzip是http协议中使用的一种加密算法,客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其他资源,返回到客户端,客户 ...
- 引用iScroll.js实现上拉和下拖刷新
使用技巧 1.引用iScroll.js, 在初始化时添加两个事件监听:touchMove.DOMContentLoaded. 2.实现iScroll插件的onScrollEnd事件, 也就是在这个事件 ...
- mvc中测试网络
.//控制器层面 public string IsAnyNetworkAvailable() { try { foreach (NetworkInterface ni in NetworkInterf ...
- vs打开项目出现“尚未配置为Web项目XXXX指定的本地IIS URL HTTP://localhost:…… .要打开此项目,需要配置虚拟目录……”提示
今天打开网上下载的一个源码,出现如标题的这个问题,这是从未遇见的提示.尝试点击是,但是网站还是运行不起来.于是网上搜索,就有了这篇. 解决的方案如下: 注意:也可以用记事本把工程文件(.vcxproj ...
- Linux中环境变量文件及配置
Linux中环境变量文件及配置 一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统 ...
- httpd 安装
官网地址:http://httpd.apache.org/docs/2.4/ Download Download the latest release from http://httpd.apache ...
- iOS 消息转发机制
这篇博客的前置知识点是 OC 的消息传递机制,如果你对此还不了解,请先学习之,再来看这篇.这篇博客我尝试用口语的方式像讲述 PPT 一样给大家讲述这个知识点. 我们来思考一个问题,如果对象在收到无法解 ...
- 基于bootstrap 的datatable插件的使用(php版)
Datatables是一款jquery表格插件.它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能.详细学习请参考其官网:http://datatables.net/中文网:http:/ ...
- 谈谈html5存储之IndexdDB
IndexdDB简介 html5中indexdDB是一种能在浏览器持久的存储结构化数据的数据库:且具有丰富的查询能力. 新建一个IndexdDB数据库 IDBOpenDBRequest定义有几个重要的 ...