让前端飞Web前端之路

Node基础入门(四):案例

2020-02-25  本文已影响0人  大海爱奔跑

上一篇《Node基础入门(三):数据交互》

用以上所学知识开发一个登录/注册的程序。

一、需求分析

二、接口设计

三、代码开发

app.js

let http = require('http')
let url = require('url')
// 将post的数据从字符串类型转化为我们需要的json类型
let querystring = require('querystring')
// 为了成功访问http://localhost:8080/login.html
let fs = require('fs')

// 这里用一个json代替数据库,假设用户表已经有一个用户admin,密码是123
let user = {
  admin: '123'
}

http.createServer((req, res) => {
  // 获取数据
  let path, get, post

  if (req.method === 'GET') {
    let {pathname, query} = url.parse(req.url, true)
    path = pathname
    get = query
    complete()
  } else if (req.method === 'POST') {
    let result = []
    path = req.url
    req.on('data', buffer => {
      result.push(buffer)
    })
    req.on('end', () => {
      // 合并片段,然后转成字符串,最后处理成json
      post = querystring.parse(Buffer.concat(result).toString())
      complete()
    })
  }

  function complete () {
    if (path === '/login') {
      // 解决中文乱码
      res.writeHead(200, {
        'Content-Type': 'text/plain; charset=utf-8'
      })
      let {username, password} = get
      if (!user[username]) {
        res.end(JSON.stringify({
          err: 1,
          msg: '账户不存在'
        }))
      } else if (user[username] !== password) {
        res.end(JSON.stringify({
          err: 1,
          msg: '密码错误'
        }))
      } else {
        res.end(JSON.stringify({
          err: 0,
          msg: '登录成功'
        }))
      }
    } else if (path === '/reg') {
      res.writeHead(200, {
        'Content-Type': 'text/plain; charset=utf-8'
      })
      let {username, password} = post
      if (user[username]) {
        res.end(JSON.stringify({
          err: 1,
          msg: '账户已存在'
        }))
      } else {
        user[username] = password
        res.end(JSON.stringify({
          err: 0,
          msg: '注册成功'
        }))
      }
    } else {
      // 说明是文件,则调用fs.readFile(),因此才能成功访问http://localhost:8080/login.html
      fs.readFile(`.${req.url}`, (err, data) => {
        if (err) {
          res.end('404')
        } else {
          res.end(data)
        }
      })
    }
  }
}).listen(8080)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录/注册</title>
</head>
<body>
<div class="wrapper">
  账户:<input type="text" id="username"><br>
  密码:<input type="password" id="password"><br>
  <button id="login">登录</button><br>
  <button id="reg">注册</button>
</div>

<!--我们需要引入jQuery(目的是发送ajax请求),利用之前学到的npm install jquery安装jquery,成功后将node_modules/jquery/dist/里面的jquery.min.js拷贝至项目根目录-->
<script src="jquery.min.js"></script>
<script>
  // 点击登录
  $('#login').click(() => {
    $.ajax({
      url: '/login',
      method: 'get',
      data: {
        username: $('#username').val(),
        password: $('#password').val()
      },
      dataType: 'json',
      success (res) {
        if (res.err) {
          alert(res.msg)
        } else {
          alert('登录成功')
          location.href = 'admin.html'
        }
      }
    })
  })
  // 点击注册
  $('#reg').click(() => {
    $.ajax({
      url: '/reg',
      method: 'post',
      data: {
        username: $('#username').val(),
        password: $('#password').val()
      },
      dataType: 'json',
      success (res) {
        if (res.err) {
          alert(res.msg)
        } else {
          alert('注册成功')
        }
      }
    })
  })
</script>
</body>
</html>

admin.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>后台</title>
</head>
<body>
<h2>这里是后台首页</h2>
</body>
</html>

四、测试截图

1. 账户:admin,密码:123,点击登录,登录成功

2. 账户:admin,密码:111,点击登录,密码错误

3. 账户:eric,密码:123,点击登录,账户不存在

4. 账户:eric,密码:123,点击注册,注册成功

5. 账户:eric,密码:123,点击登录,登录成功

6. 账户:eric,密码:123,点击注册,账户已存在

上一篇 下一篇

猜你喜欢

热点阅读