Node.js利用Express實現(xiàn)用戶注冊登陸功能(推薦)
要求
- 了解Express框架
- 了解node.js常用模塊:express,body-parser,mysql
- 了解express Router
- 了解HTML form表單
- 了解MySQL Server 及安裝使用
- 了解SQLyog使用
環(huán)境
- 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。連接成功需要創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表
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
實戰(zhàn)
前端
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, 調(diào)用封裝好的數(shù)據(jù)庫接口: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;
數(shù)據(jù)庫接口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
結(jié)果及演示
瀏覽器看效果及整個過程。
到此這篇關(guān)于Node.js利用Express實現(xiàn)用戶注冊登陸功能的文章就介紹到這了,更多相關(guān)Node.js用戶注冊登陸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node.js中的http.response.writeHead方法使用說明
這篇文章主要介紹了node.js中的http.response.writeHead方法使用說明,本文介紹了http.response.writeHead的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下2014-12-12學習使用grunt來打包JavaScript和CSS程序的教程
這篇文章主要介紹了學習使用grunt來打包JavaScript和CSS程序的教程,grunt基于node.js和需要的朋友可以參考下2016-01-01nodeJs實現(xiàn)基于連接池連接mysql的方法示例
這篇文章主要介紹了nodeJs實現(xiàn)基于連接池連接mysql的方法,結(jié)合具體實例形式分析了nodejs連接池操作mysql數(shù)據(jù)庫連接的實現(xiàn)與使用技巧,需要的朋友可以參考下2018-02-02