接口API
- 不同功能层之间的通信规则
- 主要概念:
- 参数 :username,password
- 返回值,一般是json
- 文档、使用案例
- json模拟的数据库
实现登录与注册
代码写的很烂,基本上是能用就行
app.js
const http = require("http");const querystring = require("querystring");const fs = require("fs");const users = {admin: 123456,};const loginError = {err: 1,msg: "用户名不存在",};http.createServer((req, res) => {//获取数据let path;if (req.method === "GET") {const data = new URL(`${req.url}`, "http://localhost:8080/"); // new一个URL实例// console.log(data); // 可以打印出来看看里面有什么,const username = data.searchParams.get("username"); // 通过searchParams的get可以获取到想要获取的数据const password = data.searchParams.get("password");path = data.pathname;const get = { username, password };// console.log(get);// console.log(path);complete(get);} else if (req.method === "POST") {let arr = [];path = req.url;// get = { username, password };// console.log("22222", path);req.on("data", buffer => {arr.push(buffer);});req.on("end", () => {const data = Buffer.concat(arr).toString();const post = querystring.parse(data);// console.log("@", post);complete(post);});}function complete(data) {if (path === "/login") {res.writeHead(200, {"Content-Type": "text/plain;charset=utf-8",});const { username, password } = data;// console.log(get);if (!users[username]) {res.end(JSON.stringify(loginError));} else if (users[username] != password) {// console.log(users[username]);// console.log(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",});const { username, password } = data;// console.log("@", data);if (users[username]) {res.end(JSON.stringify({err: 1,msg: "账户已存在",}));} else {users[username] = password;// console.log("@", users);res.end(JSON.stringify({err: 0,msg: "注册成功",}));}} else {fs.readFile(`static/${path}`, (err, data) => {err ? res.end("404") : res.end(data);});}}}).listen(8080);
login.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title><link rel="stylesheet" type="text/css" href="./css/login.css" /></head><body><div class="container"><h1>Please Login</h1><form><div class="form-control"><input type="text" required id="username" /><label><!-- <span style="transition-delay : 0ms;">E</span><span style="transition-delay : 50ms;">m</span><span style="transition-delay : 100ms;">a</span><span style="transition-delay : 150ms;">i</span><span style="transition-delay : 200ms;">l</span> --></label></div><div class="form-control"><input type="password" required id="password"><label>Password</label></div><button class="btn" id="login">Login</button><p class="text">Dont't have an account?<button class="btn small" id="reg">Register</button></p></form></div><script>const labels = document.querySelectorAll('.form-control label');labels.forEach(label => {label.innerHTML = label.innerText.split('').map((letter, idx) => `<span style="transition-delay:${idx*50}ms">${letter}</span>`).join('');})</script><script src='./jquery.min.js'></script><script>$('#login').click(function () {$.ajax({url: "/login",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(function () {$.ajax({url: "/reg",method: 'post',data: {username: $('#username').val(),password: $('#password').val()},dataType: "json",success(res) {console.log("@", res)res.err ?alert(res.msg) :alert("注册成功")}})})</script></body></html>
* {margin: 0;padding: 0;box-sizing: border-box;}body {background-color: steelblue;color: white;font-family: sans-serif;display: flex;justify-content: center;align-items: center;height: 100vh;}.container {background-color: rgba(0, 0, 0, 0.4);padding: 20px 40px;border-radius: 5px;}.container h1 {text-align: center;margin-bottom: 30px;}.container a {text-decoration: none;color: lightblue;}.btn {cursor: pointer;width: 100%;background-color: lightblue;padding: 15px;border: 0;font-size: 16px;font-family: inherit;}.btn:focus {outline: 10px solid pink;}.btn:active {transform: scale(0.98);}.btn.small {display:inline;width: 100px;height:40px;text-align: center;}.text {margin-top: 30px;}.form-control {position: relative;width: 300px;margin: 20px 0 40px;}.form-control input {background-color: transparent;border: 0;border-bottom: 2px solid white;display: block;width: 100%;padding: 15px 0;font-size: 18px;color: white;}.form-control input:focus {outline: 0;border-bottom-color: lightblue;}.form-control input:focus + label span {transform: translateY(-30px);color: lightblue;}.form-control input:valid {border-bottom-color: lightblue;}.form-control input:valid + label span {transform: translateY(-30px);color: lightblue;}.form-control label {position: absolute;left: 0;top: 15px;}.form-control label span {display: inline-block;font-size: 18px;transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);}
css不是重点,我只是把之前做的好看的login界面拿来用了\
admin.html 登录成功后的界面
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Login</title><link rel="stylesheet" type="text/css" href="./css/login.css" /></head><body><div class="container"><form><p>登录成功</p></form></div></body></html>
总结
深入建议
- koa
- express
- 数据库:mongodb、mysql
