Node.js原生及Express方法實現註冊登陸原理

因爲本文只是實現其原理,因此沒有使用數據庫,只是在js裏面模擬數據庫,固然實際中仍是須要用數據庫的。html

1.node.js原生方法node

①html頁面,很是簡單,沒有一絲美化~咱們叫它user.htmlajax

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>user</title>
</head>
<body>
    用戶:<input type="text" id="user"><br>
    密碼:<input type="password" id="pass"><br>
    <input type="button" value="註冊" id="reg_btn">
    <input type="button" value="登陸" id="login_btn">
</body>
</html>

②而後,咱們來寫node服務器,關鍵的點我都註釋出來了,起個名字叫server.js吧數據庫

const http = require('http');             //node原生模塊,用來建立服務器
const fs = require('fs');                 //node原生模塊,用於文件操做
const urlLib = require('url');            //node原生模塊,用於解析URL地址
const querystring = require('querystring');//node原生模塊,用於解析POST數據

var users = {};//{"user":"pass"}   模擬數據庫船建一個JSON對象,用於存儲用戶信息

var server = http.createServer(function (req, res) {        //建立服務器
    var str = '';                   //建立空字符串用來保存接收到的POST數據
    req.on('data',function (data) {
        str += data;                //此處需注意,若是客戶端傳過來的數據很是大,它會分屢次接收
    });
    req.on('end',function () {      //當數據傳輸結束,會執行'end'(只執行一次)
        var obj = urlLib.parse(req.url,true);  //解析URL地址
        const url = obj.pathname;              //得到接口地址
        const GET = obj.query;                 //得到GET數據
        const POST = querystring.parse(str);   //解析POST數據
        if (url == '/user'){  //讀取接口
            switch (GET.act){
                case 'reg':
                    //1.用戶名是否存在
                    if (users[GET.user]){
                        res.write('{"ok":false,"msg":"此用戶已存在!"}')
                    }else {
                    //2.插入新註冊用戶
                        users[GET.user] = GET.pass;
                        res.write('{"ok":true,"msg":"註冊成功!"}')
                    };
                    break;
                case 'login':
                    //1.用戶名是否存在
                    if (users[GET.user] == null){
                        res.write('{"ok":false,"msg":"此用戶不存在!"}')
                    }else if(users[GET.user] != GET.pass){
                        res.write('{"ok":false,"msg":"用戶名或密碼錯誤!"}')
                    }else {
                        res.write('{"ok":true,"msg":"登錄成功!"}')
                    };
                    break;
                default:
                    res.write('{"ok":false,"msg":"未知操做!"}')
            };
            res.end();
        }else {  //讀取文件
            var fileName = './www' + url;  //靜態文件存放地址(www是目錄)
            fs.readFile(fileName,function (err,data) {
                if (err){
                    res.write('404');
                }else {
                    res.write(data)
                };
                res.end()
            });
        };
    });
});
server.listen(8081); //監聽端口

③服務器寫好了,咱們來寫觸發事件(我用的封裝過的Ajax.js,你們用jQuery也是能夠的,稍微改一下便可)express

            var oTxtUser=document.getElementById('user');
            var oTxtPass=document.getElementById('pass');
            var oBtnReg=document.getElementById('reg_btn');
            var oBtnLogin=document.getElementById('login_btn');

            oBtnLogin.onclick=function (){
                ajax({
                    url: '/user',
                    data: {act: 'login', user: oTxtUser.value, pass: oTxtPass.value},
                    type: 'get',
                    success: function (str){
                        var json=eval('('+str+')');
                        console.log(json);
                        if(json.ok){
                            alert('登陸成功');
                        }else{
                            alert('登陸失敗:'+json.msg);
                        }
                    },
                    error: function (){
                        alert('通訊錯誤');
                    }
                });
            };

            oBtnReg.onclick=function (){
                ajax({
                    url: '/user',
                    data: {act: 'reg', user: oTxtUser.value, pass: oTxtPass.value},
                    type: 'get',
                    success: function (str){
                        var json=eval('('+str+')');

                        if(json.ok){
                            alert('註冊成功');
                        }else{
                            alert('註冊失敗:'+json.msg);
                        }
                    },
                    error: function (){
                        alert('通訊錯誤');
                    }
                });
            };

至此,咱們的簡單註冊登陸就完成了,啓動一下server.js,而後便可操做。json

 

 2.Express方法服務器

總體思路跟原生的差很少,只是多了一些中間件和方法。html和js觸發事件跟前面基本同樣,這裏咱們直接來寫Express服務器。框架

①使用Express須要先下載express框架,後面須要什麼咱們就下載什麼(express-static是咱們後面須要用到的中間件)ui

node install express express-staticurl

②直接來寫登錄服務器login.js

const express=require('express');                           //引入Express框架
const expressStatic=require('express-static');              //用來給靜態文件設置目錄
var server=express();       //建立Express服務器
server.listen(8081);        //監聽服務器
var users={                 //模擬數據庫,製造假的用戶註冊信息
    "zhangsan":"123",
    "lisi":"456",
    "wangwu":"789"
};
server.get('/login',function (req,res) {
    console.log(req.query)
    var user = req.query["user"];
    var pass = req.query["pass"];
    if (users[user]==null){
        res.send({ok:false,msg:'此用戶不存在!'});
    }else {
        if(users[user]!=pass){
            res.send({ok:false,msg:'密碼錯誤!'});
        }else {
            res.send({ok:true,msg:'成功!'});
        }
    };
});
server.use(expressStatic('./www')); //設置靜態文件目錄

啓動一下login.js,而後便可操做。

這兩種方法都是最基礎的原理,若是在實際工做中還須要考慮不少東西,共勉!

相關文章
相關標籤/搜索