node实战-建一个有注册和登录功能的服务器

版权声明:本文为博主原创文章,如需转载请务必注明原地址。 https://blog.csdn.net/qq_31393401/article/details/80333857

旨在初步建立一个简单的前后台完备的服务器,省略了防错验证

目录结构

这里写图片描述

启动

  1. cd到目录的node文件夹下,node server.js
  2. 浏览器访问localhost:8080/user.html,即可进入注册/登录页面 user.html
  3. 输入用户名和密码,开始测试

文件源码:

ajxa.js

function json2url(json){
    var arr=[];
    for(var name in json){
        arr.push(name+'='+json[name]);
    }
    return arr.join('&');
}

function ajax(json){
    json=json || {};
    if(!json.url)return;
    json.data=json.data || {};
    json.type=json.type || 'get';

    var timer=null;

    if(window.XMLHttpRequest){
        var oAjax=new XMLHttpRequest();
    }else{
        var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
    }

    switch(json.type){
        case 'get':
            oAjax.open('GET',json.url+'?'+json2url(json.data),true);
            oAjax.send();
            break;
        case 'post':
            oAjax.open('POST',json.url,true);
            oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            oAjax.send(json2url(json.data));
            break;
    }

    oAjax.onreadystatechange=function(){
        if(oAjax.readyState==4){
            clearTimeout(timer);
            if(oAjax.status>=200 && oAjax.status<300 || oAjax.status==304){
                json.success && json.success(oAjax.responseText);
            }else{
                json.error && json.error(oAjax.status);
            }
        }
    };
}

前台html页面

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="ajax.js" charset="utf-8"></script>
    <script type="text/javascript">
      window.onload=function (){
        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+')');

              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('通信错误');
            }
          });
        };
      };
    </script>
  </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>

server.js

const http = require('http');
const fs = require('fs');
const querystring = require('querystring');
const urlLib = require('url');

var users = {}; //{"blue": "123456", "zhangsan": "123456", "lisi": "321321"}

var server = http.createServer(function (req, res) {
    //解析数据
    var str = '';
    req.on('data', function (data) {
        str += data;
    });
    req.on('end', function () {
        var obj = urlLib.parse(req.url, true);

        const url = obj.pathname;
        const GET = obj.query;
        const POST = querystring.parse(str);

        //区分——接口、文件
        if (url == '/user') { //接口
            switch (GET.act) {
                case 'reg':
                    //1.检查用户名是否已经有了
                    if (users[GET.user]) {
                        res.write('{"ok": false, "msg": "此用户已存在"}');
                    } else {
                        //2.插入users
                        users[GET.user] = GET.pass;
                        res.write('{"ok": true, "msg": "注册成功"}');
                    }
                    break;
                case 'login':
                    //1.检查用户是否存在
                    if (users[GET.user] == null) {
                        res.write('{"ok": false, "msg": "此用户不存在"}');
                        //2.检查用户密码
                    } 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": "未知的act"}');
            }
            res.end();
        } else { //文件
            //读取文件
            var file_name = './www' + url;
            console.log(file_name);
            fs.readFile(file_name, function (err, data) {
                if (err) {
                    console.log(err)
                    res.write('404');
                } else {
                    res.write(data);
                }
                res.end();
            });
        }
    });
});

server.listen(8080);

关于node的基础知识可以浏览我的其他文章

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页