zoukankan      html  css  js  c++  java
  • node02

    1、使用已有的知识实现一个简单的登录和注册的界面

    请求有请求接口有请求页面的,我们需要加以区分

    以下是客户端代码

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <script src="./ajax.js"></script>
    
    <body>
        用户名:<input type="text" name="" id="user"><br />
        密码:<input type="passsword" name="" id="pwd">
        <input type="button" value="注册" id="register">
        <input type="button" value="登录" id="login">
    
    </body>
    <script>
        window.onload = function () {
            let user = document.getElementById('user')
            let pwd = document.getElementById('pwd')
            let reg = document.getElementById('register')
            let log = document.getElementById('login')
    
            reg.onclick = function () {
                ajax({
                    url: '/user',
                    data: { act: 'reg', user: user.value, pwd: pwd.value },
                    type: 'get',
                    success(str) {
                        let json = eval('(' + str + ')')
                        if (json.ok) {
                            alert('注册成功')
                        } else {
                            alert('注册失败' + json.msg)
                        }
                    },
                    error() {
                        alert('sth is wrong')
                    }
                })
            }
    
            log.onclick = function () {
                ajax({
                    url: '/user',
                    data: { act: 'reg', user: user.value, pwd: pwd.value },
                    type: 'get',
                    success(str) {
                        let json = eval('(' + str + ')')
                        if (json.ok) {
                            alert('登录成功')
                        } else {
                            alert('登录失败' + json.msg)
                        }
                    },
                    error() {
                        alert('sth is wrong')
                    }
                })
            }
        }
    
    </script>
    
    </html>

    以下是服务端代码

    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;
          fs.readFile(file_name, function (err, data) {
            if (err) {
              res.write('404');
            } else {
              console.log(file_name)
              res.write(data);
            }
            res.end();
          });
        }
      });
    });
    
    server.listen(8080);

    3、模块化

    1)系统模块:

    Assert:断言

    Buffer:

    cluster:进程群

    crypto:加密

    DNS

    Errors

    Events(重点)用于模拟事件

    Path 路径功能

    2)使用模块导出功能:

    //当前目录必须使用./
    let a = 28
    exports.a = a
    //使用时
    const mod = require('./mod.js')
    console.log(mod.a)

    3)node中不存在全局变量,声明的变量仅在模块内有效

    module.exports=exports

    可用于批量输出一个对象

    module.exports={a:12,b:58}

    引入时.js可以省略

    4)npm nodejs包管理器

    统一下载途径

    自动下载依赖

    提交自定义模块

    npm uninstall xx 卸载

    在node_modules文件夹内的依赖引入可以不用加./

    因为系统会自动到node_modules深度遍历模块

    先查找系统模块,再查找node_modules

    5)上传自己的模块

    npm login //进行登录

    npm init -y //简单地初始化

    npm publish //进行发布,不能发布同一版本号的

    npm --force unpulish 对已发布的包进行强制删除

    4、express框架

    1)安装

    使用npm安装即可

    2)使用express构造服务器

    const express = require('express')
    
    let server = express()
    server.use('/a.html', function (req, res) {//已经不是原生的req,res对象了,经过了express封装
        res.send('这是A网页')//发送响应
        res.end()
    })//两个参数,请求路径及回调
    
    server.use('/b.html', function (req, res) {
        res.send('这是B网页')
        res.end()
    })//两个参数,路径及回调
    
    server.listen(8080, () => console.log('server is running'))

    send与write的区别:

    send可以发送一个json 对象,write只能发送一个字符串或Buffer对象

    express保留了原生的功能,添加了一些新特性

    3)3种接收用户请求的新方法

    use是get/post都可以接收

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <form action="http://localhost:8080" method="post">
        user: <input type="text" name="user">
        <input type="submit" value="submit">
        </form>
    </body>
    </html>

    //server.js
    const express = require('express')

    let server = express()
    server.get('/',function(req,res){
    console.log('get!!!!!!!!!!!')
    })
    server.post('/',function(req,res){
    console.log('post!!!!!!!!!!!')
    })

    server.listen(8080, () => console.log('server is running'))

    4)用express来改写登录与注册

    //express-static中间件的使用
    const express = require('express') const es=require('express-static') let server = express() //请求a.html,借助express的插件express-static来完成 //它将帮助我们读取静态文件 server.use(es('./www'))//参数是一个函数,函数内的参数是一个路径,它将根据 //请求参数中的文件名自动地返回相应的文件 server.listen(8080, () => console.log('server is running'))
    const express = require('express')
    const es=require('express-static')
    
    let server = express()
    
    //假数据
    let users={
        "cc":"123",
        "ee":"456"
    }
    
    server.get('/login',function(req,res){
    //提取参数内容 req.query即可
    let user=req.query['user']
    let pwd=req.query['pwd']
    
    //登录功能
    if(!users[user]){
        res.send({"ok":false,msg:"user not found"})
    }else if(users[user]!==pwd){
        res.send({"ok":false,msg:"incorrect pwd"})
    }else{
        res.send({"ok":true,msg:"success login"})
    }
    })
    
    server.use(es('./www'))
    
    server.listen(8080, () => console.log('server is running'))
    
    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <script src="./ajax.js"></script>
    
    <body>
        用户名:<input type="text" name="" id="user"><br />
        密码:<input type="passsword" name="" id="pwd">
        <input type="button" value="注册" id="register">
        <input type="button" value="登录" id="login">
    
    </body>
    <script>
        window.onload = function () {
            let user = document.getElementById('user')
            let pwd = document.getElementById('pwd')
            let reg = document.getElementById('register')
            let log = document.getElementById('login')
    
            
    
            log.onclick = function () {
                ajax({
                    url: '/login',
                    data: { user: user.value, pwd: pwd.value },
                    type: 'get',
                    success(str) {
                        let json = eval('(' + str + ')')
                        if (json.ok) {
                            alert('登录成功')
                        } else {
                            alert('登录失败' + json.msg)
                        }
                    },
                    error() {
                        alert('sth is wrong')
                    }
                })
            }
        }
    
    </script>
    
    </html>
  • 相关阅读:
    《百闻牌》
    unity插件开发:dos(cmd)命令输入窗口
    Unity插件开发:使用ScriptedImporter优化Lua文件导入
    崩坏3 渲染分析和PBR展示
    Unity插件开发:SerializedObject/SerializedProperty——查找引用的资源
    Unity插件开发:PrefabUtility(二)--Prefab实例批量Apply
    ml-agent v0.3 win10安装和实践
    Unity文件、文件引用、meta详解
    Unity开发:开启Unity项目中VS工程的属性面板
    Unity宏+RSP文件定义宏
  • 原文地址:https://www.cnblogs.com/Tanqurey/p/10773668.html
Copyright © 2011-2022 走看看