Nodejs實現用戶註冊

来源:https://www.cnblogs.com/resultset/archive/2019/04/07/10666174.html
-Advertisement-
Play Games

1創建連接池對象 2導出連接池對象 1 /** 2 * 1.引入mysql模塊 3 * 2.創建連接池對象 4 * 3.導出連接池對象 5 */ 6 const mysql = require('mysql'); 7 var pool = mysql.createPool({ 8 host:'loc ...


1創建連接池對象

2導出連接池對象

 1 /**
 2  * 1.引入mysql模塊
 3  * 2.創建連接池對象
 4  * 3.導出連接池對象
 5  */
 6 const mysql = require('mysql');
 7 var pool = mysql.createPool({
 8     host:'localhost',
 9     port:'3306',
10     user:'xxx',
11     password:'xxx',
12     database:'xxx',
13     connectionLimit:20
14 });
15 module.exports = pool;
View Code

1托管靜態資源到public

2使用body-parser中間件

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

 1 //引入express模塊
 2 const express = require('express');
 3 //引入路由器
 4 const userRouter = require('./routes/user.js');
 5 const productRouter = require('./routes/product.js');
 6 const myproRouter = require('./routes/mypro.js');
 7 const demoRouter = require('./routes/demo.js');
 8 const bodyParser = require('body-parser');
 9 //創建web伺服器
10 var server = express();
11 //監聽埠
12 server.listen(8080);
13 //托管靜態資源
14 server.use(express.static('public'));
15 server.use(express.static('ajaxdemo'));
16 server.use(express.static('mypro'));
17 server.use(express.static('js'));
18 server.use(express.static('css'));
19 server.use(express.static('bootstrap'));
20 server.use(express.static('img'));
21 //使用body-parser中間件
22 server.use(bodyParser.urlencoded({
23     extended:false
24 }));
25 //掛載路由器
26 server.use('/user',userRouter);
27 server.use('/demo',demoRouter);
View Code

1引入連接池模塊

2創建路由器對象

3往路由器中添加路由

4在路由中使用連接池

5導出路由器

 1 /*
 2     1.引入express
 3     2.創建路由器對象
 4     3.添加路由
 5     4.導出路由器
 6     5.引入連接池對象
 7     6.將數據插入到資料庫中
 8 */
 9 const express = require('express');
10 const pool = require('../pool.js');
11 var router = express.Router();
12 //查看所有數據
13 router.get('/sele', (req, res) => {
14     //驗證數據是否為空
15     var obj = req.query;
16     //console.log('query',obj);
17     for(var key in obj) {
18         if(!obj[key]) {
19             res.send('數據不能為空');
20             return;
21         }
22     }
23     var sqlselect = 'select * from xxx';
24     pool.query(sqlselect,(err, result) => {
25         if(err) throw err;
26         if(result.length > 0) {
27             res.send(result);
28         }
29     });
30 });
31 //查看用戶名
32 router.get('/seleUname', (req, res) => {
33     //驗證數據是否為空
34     var obj = req.query;
35     //console.log('query',obj);
36     for(var key in obj) {
37         if(!obj[key]) {
38             res.send('數據不能為空');
39             return;
40         }
41     }
42     var sqlselect = 'select uname from xxx where uname = ?';
43     pool.query(sqlselect,[obj.uname],(err,result) => {
44         if(err) throw err;
45         if(result.length > 0) {
46             console.log(result.tength);
47             res.send('1');
48         }else{
49             res.send('0');
50         }
51     });
52 });
53 router.post('/reg', (req, res) => {
54     var obj = req.body;
55     console.log('body',obj);
56     for(var key in obj){
57         if(!obj[key]){
58             res.send('內容不能為空');
59             return;
60         }
61     }
62     var selectInsert = 'insert into xxx set ?';
63     pool.query(selectInsert, [obj], (err, result) => {
64         if(err) throw err;
65         if(result.affectedRows > 0) {
66             console.log(result.affectedRows)
67             res.send('1');
68         } else {
69             res.send('0');
70             console.log(result.affectedRows)
71         }
72     });
73 });
74 //導出路由器
75 module.exports = router;
View Code

4.html頁面

 1 <!doctype html>
 2 <html>
 3 
 4     <head>
 5         <meta charset="UTF-8">
 6         <title>Document</title>
 7         <!--<link rel="stylesheet" type="text/css" href="/code.css" />-->
 8         <script src="/reg.js" type="text/javascript" charset="utf-8"></script>
 9         <script src="/jquery.min.js" type="text/javascript" charset="utf-8"></script>
10         <script src="/bootstrap.min.js" type="text/javascript" charset="utf-8"></script>
11         <link rel="stylesheet" type="text/css" href="/bootstrap.css" />
12         <style type="text/css">
13             *{
14                 margin: 0;
15                 padding: 0;
16             }
17             body{
18                 background: url(/true.png) no-repeat;
19                 background-size: cover;
20                 overflow-x: hidden;
21                 overflow-y: hidden;
22             }
23             #box{
24                 width: 700px;
25                 height: 500px;
26                 left: 50%;
27                 top: 50%;
28                 margin-left: -350px;
29                 margin-top: -250px;
30                 position: absolute;
31             }
32         </style>
33     </head>
34 
35     <body>
36         <div id="box">
37             <div class="container">
38             <div class="row clearfix">
39                 <div class="col-md-10 column">
40                     <form class="form-horizontal" role="form">
41                         <div class="form-group">
42                             <label for="inputEmail3" class="col-sm-2 control-label">UserName:</label>
43                             <div id="uname_box" class="col-sm-6">
44                                 <input id="uname" name="uname" type="text" class="form-control" placeholder="Please enter a user name" />
45                             </div>
46                             <div id="p1">
47 
48                             </div>
49                         </div>
50                         <div class="form-group">
51                             <label for="inputPassword3" class="col-sm-2 control-label">UserPassword:</label>
52                             <div class="col-sm-6">
53                                 <input id="upwd" name='upwd' type="password" class="form-control" placeholder="Please enter your user password"/>
54                             </div>
55                             <div id="p2">
56 
57                             </div>
58                         </div>
59                         <div class="form-group">
60                             <label for="inputPassword3" class="col-sm-2 control-label">ConfirmPassword:</label>
61                             <div class="col-sm-6">
62                                 <input id="upwd1" name='upwd' type="password" class="form-control" placeholder="Confirm user password"/>
63                             </div>
64                             <div id="p3">
65 
66                             </div>
67                         </div>
68                         <div class="form-group">
69                             <label for="inputPassword3" class="col-sm-2 control-label">Email:</label>
70                             <div class="col-sm-6">
71                                 <input id="email" name="email" type="text" class="form-control" placeholder="Please enter user email"/>
72                             </div>
73                             <div id="p4">
74 
75                             </div>
76                         </div>
77                         <div class="form-group">
78                             <label for="inputPassword3" class="col-sm-2 control-label">Tel:</label>
79                             <div class="col-sm-6">
80                                 <input id="phone" name="phone" type="text" class="form-control" placeholder="Please enter the user's mobile phone number"/>
81                             </div>
82                             <div id="p5">
83 
84                             </div>
85                         </div>
86                         <div class="form-group">
87                             <div class="col-sm-offset-2 col-sm-8">
88                                 <button id="reg" type="submit" class="btn col-lg-9 btn-info">Register</button>
89                             </div>
90                         </div>
91                     </form>
92                 </div>
93             </div>
94         </div>
95         </div>
96     </body>
97 </html>
View Code

5.js前端驗證以及Ajax非同步交互實現用戶註冊

  1 window.onload = function() {
  2     uname.onfocus = notNull;
  3     uname.onblur = notNull;
  4     upwd.onfocus = notNull;
  5     upwd.onblur = notNull;
  6     upwd1.onfocus = notNull;
  7     upwd1.onblur = notNull;
  8     email.onfocus = notNull;
  9     email.onblur = notNull;
 10     phone.onfocus = notNull;
 11     phone.onblur = notNull;
 12     upwd.onfocus = passw;
 13     upwd.onblur = passw;
 14     upwd1.onfocus = passw;
 15     upwd1.onblur = passw;
 16     //聲明一個全局的xhr
 17     var xhr = new XMLHttpRequest();
 18     var flag = true;
 19     //驗證是否為空並且用戶名是否已經存在
 20     function notNull() {
 21         if(!uname.value) {
 22             p1.innerHTML = '用戶名不能為空';
 23             return;
 24         } else {
 25             p1.innerHTML = '';
 26             getUname();
 27 
 28         }
 29         if(!upwd.value) {
 30             p2.innerHTML = '密碼不能為空';
 31             return;
 32         } else {
 33             p2.innerHTML = '';
 34         }
 35         if(!upwd1.value) {
 36             p3.innerHTML = '確認密碼不能為空';
 37             return;
 38         } else {
 39             p3.innerHTML = '';
 40         }
 41         if(!email.value) {
 42             p4.innerHTML = '郵箱不能為空';
 43             return;
 44         } else {
 45             p4.innerHTML = '';
 46         }
 47         if(!phone.value) {
 48             p5.innerHTML = '手機號不能為空';
 49             return;
 50         } else {
 51             p5.innerHTML = '';
 52         }
 53     }
 54     //驗證用戶名是否已存在
 55     function getUname() {
 56         xhr.onreadystatechange = function() {
 57             if(xhr.readyState == 4 && xhr.status == 200) {
 58                 var result = xhr.responseText;
 59                 console.log(result);
 60                 if(result === '1') {
 61                     p1.innerHTML = '用戶名已存在';
 62                     //如果用戶名已存在,該按鈕處於禁用狀態
 63                     reg.setAttribute('disabled','true');
 64                 } else {
 65                     p1.innerHTML = '';
 66                     reg.disabled = false;
 67                 }
 68             }
 69         }
 70         var url = "/demo/seleUname?uname=" + uname.value;
 71         xhr.open('get', url, true);
 72         xhr.send(null);
 73     }
 74     //密碼驗證
 75     function passw() {
 76         if(upwd.value != upwd1.value) {
 77             p3.innerHTML = '兩次密碼不一致';
 78         }
 79     }
 80     
 81     reg.onclick = function() {
 82         //查詢所有用戶信息
 83         xhr.onreadystatechange = function() {
 84             if(xhr.readyState == 4 && xhr.status == 200) {
 85                 var result = xhr.responseText;
 86                 console.log(JSON.parse(result));
 87             }
 88         }
 89         var url = "/demo/sele";
 90         xhr.open('get', url, true);
 91         xhr.send(null);
 92 
 93         //執行註冊
 94         xhr.onreadystatechange = function() {
 95             if(xhr.readyState == 4 && xhr.status == 200) {
 96                 var result = xhr.responseText;
 97                 if(flag) {
 98                     getUname();
 99                     if(result === '1') {
100                         alert('success');
101                         setTimeout(()=>{
102                             location.href = 'http://localhost:8080/login_user.html';
103                         });
104                     } else {
105                         alert('error');
106                     }
107                 }
108 
109             }
110         }
111         var str = "/demo/reg";
112         xhr.open('post', str, true);
113         xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
114         var formdata = "uname=" + uname.value + "&upwd=" + upwd.value + "&email=" + email.value + "";
115         xhr.send(formdata);
116     }
117 }
View Code

 界面展示:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 文章大綱 一、Android崩潰日誌管理簡介二、崩潰日誌管理實戰三、項目源碼下載 一、Android崩潰日誌管理簡介 1. 什麼是android崩潰日誌管理 開發中有些地方未註意可能造成異常拋出未能caught到,然後彈出系統對話框強制退出。這種交互不好,而且開發者也不能及時獲取到底哪裡出問題。因此 ...
  • 本文是前端系列的開篇,以重覆造輪子做為引子,用本人的一個javascript類庫向初入門的前端小伙伴分享一下我對前端開發的積累,要求熟悉基礎的html和css,熟悉javascript語法,該前端系列包含基礎知識:節點的選擇與過濾,事件維護(綁定及解除及觸屏端的點擊模擬),模塊拖動,基礎動效(位置及... ...
  • 本篇是《你不知道的JavaScript》的讀書筆記 什麼是作用域? 程式離不變數,那麼變數存儲在哪裡?程式需要時如何找到他們? 這些問題說明需要一套設計良好的 規則 來存儲變數, 並且之後可以方便地找到這些變數。這套規則被稱為 作用域 。 作用域負責收集並維護由所有聲明的標識符(變數) 組成的一系列 ...
  • 項目需求: 實現一個購物車 全選框實現對商家和商品的全選 商家全選框實現對當前商家所有商品的全選 取消其中一個商品則取消對應商家全選和全選框 選中一個商家下的所有商品則勾選對應商家的全選框,不勾選全選框 選中所有商品則勾選所有商家全選框和全選框 我的思路: 1、通過對數據的簡單操作可實現更深層次的全 ...
  • 在本地測試的json沒有問題,但是打包後,發現json 的路徑不對了,變成了絕對路徑 解決方法: 建立的json文件需要放置 根目錄/static下。如項目名/static/data.json,這邊打包後就不會報路徑問題了。(請用起服務的方法來打開打包後的index.html,如anywhere來打 ...
  • 1、我在打包完成後,打開index.html文件發現地址並沒有攜帶路由。 config下的 index.js 中的build命令的配置有一個屬性叫assetsPublicPath,它的值為‘/’。意思是根目錄,這時會從index.html所在的硬碟的根目錄下開始查找,自然無法找到。 解決辦法: 改為 ...
  • 最近感覺canvas挺有意思的,在業餘時間沒事研究了一下,參考過網上一些思路,話不多說,開始啦。 github地址:https://github.com/aWhiteBear/fireworks 演示地址:https://awhitebear.github.io/fireworks/ 圖片效果如下: ...
  • 效果圖: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...