Node.js利用Express实现用户注册登陆功能(推荐)


Posted in Javascript onOctober 26, 2020

要求

  • 了解Express框架
  • 了解node.js常用模块:express,body-parser,mysql
  • 了解express Router
  • 了解HTML form表单
  • 了解MySQL Server 及安装使用
  • 了解SQLyog使用

环境

  • OS: Win10
  • Node.js: v12.19.0
  • Express: v4.17.1
  • Yarn: v1.22.10
  • 使用VScode IDE
  • body-parser:1.19.0
  • mysql: 2.18.1
  • MySQL Server:5.7
  • SQLyog:V12.9

准备

首先在Win10上安装Mysql,一路Next就行。安装完成使用SQLyog连接MySQL Server。连接成功需要创建数据库和数据表

Schema:

CREATE TABLE user (
username char(20) NOT NULL,
password char(20) NOT NULL,
email char(30) DEFAULT NULL,
address char(20) DEFAULT NULL,
phonenumber char(20) DEFAULT NULL,
logintime int(20) DEFAULT NULL,
id int(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id),
KEY username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

实战

前端

3个page, login.html, register.html.

index.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
			<title>登陆注册</title>
			<link rel="stylesheet" type="text/css" href="/stylesheets/style.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" />
		</head>
		<body>
			<a href="./register.html" rel="external nofollow" >注册</a>
			<a href="./login.html" rel="external nofollow" >登录</a>
		</body>
	</head>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
			<title>登陆注册</title>
			<link rel="stylesheet" type="text/css" href="/stylesheets/style.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" />
		</head>
		<body>
			<form action="/login" method="GET" >  
				<label for="">账号:</label> 
				<input name="user" type="text" placeholder="请输入账号"> 
				<br> 
				<label for="">密码:</label> 
				<input type="password" name="password" placeholder="请输入密码"> 
				<br>
				<input type="submit" value="登录">
			</form>
		</body>
	</head>
</html>

register.html

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
			<title>登陆注册</title>
			<link rel="stylesheet" type="text/css" href="/stylesheets/style.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" />
		</head>
		<body>
			<form action="/register" method="POST">
				<label for="">账号:</label> 
				<input name="user" type="text" placeholder="请输入账号">
				<br> 
				<label for="">密码:</label> 
				<input name="psw" type="password" placeholder="请输入密码"> 
				<br> 
				<label for="">重复密码:</label> 
				<input name="pswa" type="password" placeholder="请重复密码"> 
				<br> 
				<input type="submit" value="注册">
			</form>
		</body>
	</head>
</html>

后端 server.js

var express = require("express");
var bodyParser = require("body-parser");
var router = require("./routers");

var app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'));
app.use('/', router);

module.exports = app;

Router

router/index.js, 调用封装好的数据库接口:queryUer, addUser

const express=require("express");
const dao = require("../dao/db");

const router=express.Router();

router.get("/login", function(req,res){
 console.dir(req.query);
 try{
  dao.queryUser({username:req.query.user},function(err,record){
   if(err){
    console.log(err);
    throw error;
   }
   console.log(record);
   if(record && record.password == req.query.password){
    res.send(`${req.query.user}:登陆成功`);
   }else{
    res.send(`${req.query.user}:登陆失败,检查登陆信息是否正确`);
   }
  });
 } catch(error){
  console.log(error);
  res.send(`${req.body.user}: 登陆失败`);
 } 
})

router.post("/register", function(req,res){
 console.dir(req.body); 
 try{
  if(req.body.psw == req.body.pswa){
   dao.addUser({username:req.body.user,password:req.body.psw});
   res.send(`${req.body.user}: 注册成功`);
  } else {
   console.log(error);
   res.send(`${req.body.user}: 注册失败:,检查登陆信息是否正确`);
  }  
 } catch(error){
  console.log(error);
  res.send(`${req.body.user}: 注册失败`);
 }
 
})
module.exports = router;

数据库接口db.js

dao/db.js

var mysqlClient= require("./mysql");

function addUser (userInfo,callabck){
 console.log("addUser:"+ userInfo);
 var sql= `insert into user(username,password) values('${userInfo.username}','${userInfo.password}')`;
 console.log("sql:"+ sql);
 mysqlClient(sql,function(err,rows){
  if(err){
   console.log("err:"+err);
   callabck(err,null);
  } else{
   console.log("addUser result:");
   console.log(rows);
   callabck(null,rows);
  }
 })
}

function queryUser (userInfo,callabck){
 console.log("queryUser:"+ userInfo);
 var sql= `select * from user where username='${userInfo.username}'`;
 console.log("sql:"+ sql);
 mysqlClient(sql, function(err,rows){
  if(err){
   console.log("err:"+err);
   callabck(err,null);
  } else{   
   rows && rows.length>0 ? callabck(null,rows[0]): callabck(null,null);
  }
 })
}
exports.addUser = addUser;
exports.queryUser = queryUser;

dao/mysql.js

const mysql = require("mysql");
const pool = mysql.createPool({
 host:"localhost",
 user:"root",
 password:"*****",
 database:"test"
});

function query(sql,callback){
 pool.getConnection(function(err,connection){
  if(err){
   callback(err,null);
   return
  }
  connection.query(sql, function (err,rows) {   
   callback(err,rows);
   connection.release();
  });
 });
}

module.exports = query;

mysql module

yarn add mysql

运行index.js

cd src/ && node index.js

结果及演示

浏览器看效果及整个过程。
Node.js利用Express实现用户注册登陆功能(推荐)

到此这篇关于Node.js利用Express实现用户注册登陆功能的文章就介绍到这了,更多相关Node.js用户注册登陆内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
JavaScript 判断日期格式是否正确的实现代码
Jul 04 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
js实现正方形颜色从下往上升的效果
Aug 04 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
Jquery easyui开启行编辑模式增删改操作
Jan 14 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
使用JS来动态操作css的几种方法
Dec 18 Javascript
推荐几个不错的console调试技巧实现
Dec 20 Javascript
vue render函数动态加载img的src路径操作
Oct 26 #Javascript
vue实现简单的登录弹出框
Oct 26 #Javascript
让你30分钟快速掌握vue3教程
Oct 26 #Javascript
在vue项目中 实现定义全局变量 全局函数操作
Oct 26 #Javascript
vue3+typescript实现图片懒加载插件
Oct 26 #Javascript
原生js实现简单轮播图
Oct 26 #Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 #Javascript
You might like
PHP 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
新页面打开实际尺寸的图片
2006/08/25 Javascript
javascript下查找父节点的简单方法
2007/08/13 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
[03:07]DOTA2英雄基础教程 冰霜诅咒极寒幽魂
2013/12/06 DOTA
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
浅析Python3 pip换源问题
2020/01/06 Python
解决pycharm不能自动补全第三方库的函数和属性问题
2020/03/12 Python
Django models文件模型变更错误解决
2020/05/11 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
教师网络培训感言
2014/03/09 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js