一、创建html页面
创建4个页面,index.html、register.html、sign_in.html、home.html
- index.html 默认主页
- register.html 用于注册账号
- sign_in.html 用于登录账号
- home.html 用于显示登录后的页面
主要代码片段
register.html
<form id="registerForm"> <div> <label for="">用户名:<input type="text" name="name" id=""></label> </div> <div> <label for="">密码:<input type="password" name="password" id=""></label> </div> <div> <button type="submit">注册</button> </div> </form> <script src="/UploadFiles/2021-04-02/jquery.min.js">sign_in.html
<form id="signInForm"> <div> <label for="">用户名:<input type="text" name="name" id=""></label> </div> <div> <label for="">密码:<input type="password" name="password" id=""></label> </div> <div> <button type="submit">登录</button> </div> </form> <script src="/UploadFiles/2021-04-02/jquery.min.js">home.html
<p> {{loginStatus}} </p> <p> 你好,{{user.name}} </p> <p> <a href="sign_in.html">登录</a> </p>二、Node服务器
var http = require('http') 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('"errorCode":4001}`) } else { // 成功 response.statusCode = 200 // 设置 Cookie const random = Math.random() session[random] = { user_id: user.id } // 写入数据 fs.writeFileSync('./session.json', JSON.stringify(session)) response.setHeader("Set-Cookie", `'session_id=${random}; HttpOnly'`) response.end() } }) } else if (path === '/home.html') { // 获取 Cookie const cookie = request.headers['cookie'] let sessionId try { // 读取 Cookie 中的 id 值 sessionId = cookie.split(';').filter(s => s.indexOf('session_id=') >= 0)[0].split('=')[1] } catch (error) {} if (sessionId && session[sessionId]) { // 从 session 中读取对应的值 const userId = session[sessionId].user_id // 读数据库 let userArray = JSON.parse(fs.readFileSync('./database/users.json')) // 找到符合的 user let user = userArray.find(user => user.id === userId) const homeHtml = fs.readFileSync('./public/home.html').toString() let string if (user) { string = homeHtml.replace('{{loginStatus}}', '已登录').replace('{{user.name}}', user.name) response.write(string) } } else { // 读取源文件内容 const homeHtml = fs.readFileSync('./public/home.html').toString() // 替换文字 const string = homeHtml.replace('{{loginStatus}}', '未登录').replace('{{user.name}}', '') response.write(string) } response.end() } else if (path === '/register' && method === 'POST') { response.setHeader('Content-Type', 'text/html; charset=UTF-8') // read database let userArray = JSON.parse(fs.readFileSync('./database/users.json')) // read database const array = [] request.on('data', (chunk) => { array.push(chunk) }) request.on('end', () => { // convert string const string = Buffer.concat(array).toString() // convert obj const obj = JSON.parse(string) // last user id const lastUser = userArray[userArray.length - 1] // new user const newUser = { id: lastUser "text/html"};charset=utf-8`) try { content = fs.readFileSync(`./public${filePath}`) } catch (error) { content = '文件路径不存在' response.statusCode = 404 } response.write(content) response.end() } /******** main end ************/ }) server.listen(port) console.log('监听 ' + port + ' 成功!请输入下列地址访问\nhttp://localhost:' + port)三、主要思路
register.html
使用jQuery的ajax将数据发送请求 /register 给后端,成功则跳转到 sign_in.html
数据需要使用 JSON.stringify 转化为字符串在提交
/register
读取 users.json 的数据,创建一个空数组,将传递过来的参数 push 进去。将数组转换为字符串,在转换为对象。
获取数据库中最小的 id 值,将数据组成新的对象,添加进入 数据库 中。sign_in.html
使用ajax将数据发送请求 /sign_in 给后端,成功则跳转 home.html
/sign_in
读取 users.json 的数据,创建一个空数组,将传递过来的参数 push 进去。将数组转换为字符串,在转换为对象。
在读取后的数据库中,查找有没有符合条件的 user,成功返回读取后的对象,失败返回 undefined。
如果成功,设置随机数,将 随机数的值 与 user的id 绑定。并添加到 session.json 中。然后 setHeader,将cookie发送到浏览器。/home
获取登入成功后 cookie 的值。读取 session 中对应的随机数。如果随机数和session对应的随机数值存在,就显示已登录,否则显示未登录
总结
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]