美文网首页
2020-09-05记录「登录与注册」

2020-09-05记录「登录与注册」

作者: swp小小喀嚓鱼 | 来源:发表于2020-09-05 14:59 被阅读0次

1:前端先准备一个注册页面

image.png

它的代码是

 <div class="form-wrapper">
    <h1>注册</h1>
    <form action="" id="signUpForm">
    <div class="row">
        <label for="">邮箱</label>
        <input type="text" name="email" id="">
        <span class="error"></span>
    </div>
    <div class="row">
        <label for="">密码</label>
        <input type="password" name="password" id="">
        <span class="error"></span>
    </div>
   
    <div class="row">
        <label for="">确认密码</label>
        <input type="password" name="password_confirmation" id="">
        <span class="error"></span>
    </div>
     <div class="row">
        <input type="submit" value="注册">
    </div>       
    </form>
</div>

2:后端准备一个处理事情的服务器,以及存储数据的db文件

服务器看if(path===xxx)这种,因为他们都是路由,而我们这次主要要sign_up

var fs = require('fs')
var url = require('url')
var port = process.argv[2]

if(!port){
  console.log('请指定端口号好不啦?\nnode server.js 8888 这样不会吗?')
  process.exit(1)
}

var server = http.createServer(function(request, response){
  var parsedUrl = url.parse(request.url, true)
  var pathWithQuery = request.url 
  var queryString = ''
  if(pathWithQuery.indexOf('?') >= 0){ queryString = pathWithQuery.substring(pathWithQuery.indexOf('?')) }
  var path = parsedUrl.pathname
  var query = parsedUrl.query
  var method = request.method

  /******** 从这里开始看,上面不要看 ************/
 
  console.log('方方说:含查询字符串的路径\n' + pathWithQuery)
 
  if(path === '/'){    
    let string=fs.readFileSync('./index.html','utf-8')
    response.statusCode=200
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write(string)
    response.end()    
  }else if(path==='/sign_up'&&method==='GET'){
    
    ///等会写
  }else if(path==='/sign_up'&&method==='POST'){
  
    //等会写
  }else{
    response.statusCode = 404
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write('呜呜呜')
    response.end()
  }

  /******** 代码结束,下面不要看 ************/
})

server.listen(port)
console.log('监听 ' + port + ' 成功\n请用在空中转体720度然后用电饭煲打开 http://localhost:' + port)

3:开启服务器,等待前端的请求,然后后端服务器对应处理

运行git-bash,在git-bush窗口打上命令node server.js 8080,这样服务器就一直是开启状态,等待前端请求

前端的代码请求这样写,获取账号,密码,确认密码的值,把这3个值,用hash的形式存储,然后通过ajax的post方法,请求后端的sign_in路由去处理请求来的数据hash,用这个post请求,就是触发了form表单的点击事件,才会去请求


    <script>
        let $form = $('#signUpForm')
        let hash = {}
        $form.on('submit', (e) => {
            e.preventDefault()
            var need = ['email', 'password', 'password_confirmation']
            need.forEach((name) => {
                let value = $form.find(`[name=${name}]`).val()
                hash[name] = value
            })
            $.post('/sign_in', hash)
                .then((response) => {
                    console.log(response)
                    window.location.href = '/'
                }, (request) => {
                    console.log(1)
                })
        })
    </script>

4:服务器是如何处理的

接受数据,把数据放到body里
就是走}else if(path==='/sign_up'&&method==='POST'){这段话

else if(path==='/sign_up'&&method==='GET'){
    let string=fs.readFileSync('./sign_up.html','utf-8')
    response.statusCode=200
    response.setHeader('Content-Type', 'text/html;charset=utf-8')
    response.write(string)
    response.end()
    
  }else if(path==='/sign_up'&&method==='POST'){
    let body=[]//请求体
    request.on('data',(chunk)=>{
      body.push(chunk)
    }).on('end',()=>{
      body=Buffer.concat(body).toString();
      console(body)
      response.statusCode=200
      response.end()
    });   

5:升级处理一下数据,处理后,存起来

得到数据后,分割数据,并存放到hash里面,然后去验证邮箱是否有@,密码和确认密码是否一样,并且db文件没有相同的email,然后再把请求的数据存放到db文件里

else if(path==='/sign_up'&&method==='POST'){
    let body=[]//请求体
    request.on('data',(chunk)=>{
      body.push(chunk)
    }).on('end',()=>{
      body=Buffer.concat(body).toString();
      console(body)

      let strings= body.split('&')//['email=1,'password=2','password_confirmation=3']
      let hash={}
      strings.forEach(string => {
        let parts=string.split('=')//['email,1]
        let key=parts[0]
        let value=parts[1]
        hash[key]=value
      }); 
let {email,password,password_confirmation}=hash
   
      if(email.indexOf('@')===-1){
        response.statusCode=400
        response.setHeader('Content-Type','application/json; charset=utf-8')
        response.write(`
        {
          "errors":{
            "email":"invalid"
          }
        }
        `)

      }else if(password!==password_confirmation){
        response.statusCode=400
        response.write('password not match')
      }else{
        var users=fs.readFileSync('./db/users','utf8')
        try {
          users=JSON.parse(users)
        } catch (error) {
          users=[]
        }
        let inUse=false
        for(let i=0;i<users.length;i++){
          let user=users[i]
          if(user.email===email){
            inUse=true
            break;
          }
        }
        if(inUse){
          response.statusCode=400
          response.write('email in use')
        }else{
          users.push({email:email,password:password})
          var usersString=JSON.stringify(users)
          fs.writeFileSync('./db/users',usersString)
          response.statusCode=200
        }
       
      } 
      response.end()

    });   

6:注册功能就这样完成了

7:登录的功能与注册类似,就不进行记录了

相关文章

  • 2020-09-05记录「登录与注册」

    1:前端先准备一个注册页面 它的代码是 2:后端准备一个处理事情的服务器,以及存储数据的db文件 服务器看if(p...

  • 「达目标」&「全历史」登录注册流程还原

    一.「达目标」登录注册流程还原 二.「达目标」与「全历史」登录注册流程对比 三.「达目标」与「全历史」登录注册流程...

  • 登录与注册

    注册与登录(一) 注册(前端、服务器) 登录(前端、服务器) 只关注,注册登录的大体逻辑,没有实现邮箱密码校验。博...

  • 登录与注册

    app.js login.html admin

  • 注册与登录

    关于注册和登录 注册和登录是大部分网站的基础功能,重要性也是不言而喻的,特别是电商,如果注册登录有问题,用户就基本...

  • 2018-07-09

    考勤系统的登录与录入 登录界面 1)登录界面代码 录入界面 1)录入界面代码 注册界面 1)注册信息代码 1)数据...

  • 美逛新版本上线了!!!

    ​​01注册按钮与登录按钮分开,邀请码(ZCMVNSE)优先填写 注册按钮与登录按钮分开,邀请码优先填写01新用户...

  • 注册登录详情:流程设计、业务及产品思考

    注册登录业务的宏观理解 一、注册登录流程的需求痛点是? 注册登录流程的需求背景各有不同,需求痛点是统一的,即个人与...

  • Android 库上传 JCenter

    第一步 注册bintray账号,建议使用github账号直接登录。登录账号以后,记录下自己的API Key。 登录...

  • 登录注册随想

    注册与登录是一款产品绕不过的步骤,失败的登录注册流程让用户对产品望而却步。设计登录注册流程时经常会遇到这些问题,比...

网友评论

      本文标题:2020-09-05记录「登录与注册」

      本文链接:https://www.haomeiwen.com/subject/trffektx.html