对于刚入手thinkjs项目的新手来说,时常会犯的一个错误就是“混用”各种代码逻辑,比如:我们经常在做后台管理系统的时候用到的登录框,
其实它原本是有一个路由专门存放自己的代码逻辑,而在点击提交按钮的时候,要达到的效果便是账号密码正确的时候,正常跳转页面,而错误的时候给出提示;为了发现问题,就先把源代码贴出来吧:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>用户登录</title> </head> <style> *{ margin:0px; padding:0px; list-style:none;} body,html{ height:100%;font:12px/1.5 \5FAE\8F6F\96C5\9ED1,tahoma,arial,sans-serif;} html{ background:url(/static/img/bg.gif) repeat-x;} body{ background:url(/static/img/ftbg.png) 0 bottom repeat-x;} .main{ background:url(/static/img/mbg.png) no-repeat center bottom;position: absolute;width:100%;height:500px;top:50%; margin-left:0;margin-top:-290px; z-index:99} .loginbox{ width:410px; height:375px;background:url(/static/img/borderbg.png); position: absolute; left:50%; top:50%; margin-left:-200px; margin-top:-200px; border-radius:8px;-moz-border-radius: 8px; -webkit-border-radius:8px; z-index:999;} .loginbg{ width:310px;padding:40px; margin:0 auto; margin-top:10px; background-color:#fff; border-radius:8px;-moz-border-radius: 8px; -webkit-border-radius:8px;} .loginbox h3{ font-size:18px; font-weight:normal; color:#333; padding-bottom:15px; text-align:center;} .loginbox input{ width:260px; height:46px; border:1px solid #dbdbdb; padding:0 5px; font-size:14px; color:#666;border-radius:5px rgba(0,0,0,0.5);-moz-border-radius: 5px; -webkit-border-radius:5px; padding-left:45px; line-height:46px;} .loginbox ul li{ padding:15px 0; position:relative;} .loginbox .user{ background:url(/static/img/lgicon.png) 0 0 no-repeat; display:inline-block; position:absolute; width:19px; height:20px; left:15px; top:27px;} .loginbox .pwd{ background:url(/static/img/lgicon.png) 0 bottom no-repeat; display:inline-block; position:absolute; width:19px; height:22px; left:15px; top:27px;} .loginbox input.lgbtn{ width:312px; background-color:#f86c6b; border:0px; color:#fff; font-size:18px; font-family:\5FAE\8F6F\96C5\9ED1;line-height:46px; text-align:center; cursor:pointer; text-indent:0px; padding:0px;} .main h2{ margin-top:-40px; font-size:30px; text-align:center; color:#fff; font-weight:normal;} .footer{ position:fixed; z-index:9; bottom:0px; text-align:center; color:#666; width:100%; padding-bottom:20px; font-size:14px;} </style> <body> <div class="main"> <h2>用户登录</h2> <div class="loginbox"> <div class="loginbg"> <h3>用户登录</h3> <form id="fm" action="/index/login" method="post"> <ul> <li><span class="user" ></span><input type="text" name="name" required="true" value=""></li> <li><span class="pwd" ></span><input type="password" name="pwd" required="true" value=""><span style="color: red;position: absolute;top: 70px;left: 10px" id="msg">{{msg}}</span></li> <li><input type="submit" value="登录" class="lgbtn"/></li> </ul> </form> </div> </div> </div> <!--<div class="footer">陕西钢谷电子商务股份有限公司 版权所有2016</div>--> </body> </html>
页面效果:
而正常的后台处理逻辑也便是:
'use strict'; /** * author: xxx * create: 2017-02-05 * update: 2017-02-05 * desc: 登录controller */ import Base from './base.js'; import cf from '../../common/config/config'; export default class extends Base { indexAction() {//登录页面 //auto render template file index_index.html return this.display(); }; /** * 登录方法 * @returns {*} */ async loginAction() { let result = await this.model('admin').where({name: this.post().name, pwd: think.md5(this.post().pwd)}).select(); if (result&&result.length > 0) { if(result[0].state==1){ let adminrole= await this.model('adminroles').where({id:result[0].rids}).select(); if(adminrole&&adminrole[0].state!=1){ this.assign('msg', '该用户的身份已经被禁用或删除,请联系管理员!'); return this.display("index");//错误信息渲染至登录页面 }else{ let acresult = await this.model('adminaction').where({rid: result[0].rids}).field('action').select();//查询该权限id的集合 result[0]['actions'] = acresult;//把集合赋予session await this.session(cf.sessionKey, result[0]); await this.model('adminlog').add({uid: result[0].id, createtime: new Date().getTime() / 1000, ip: this.ip()})//添加登录日志 return this.redirect('/main');//跳转main路由(主要是修改页面显示url) } }else{ this.assign('msg', '该用户已经被停用或删除,请联系管理员!'); return this.display("index");//错误信息渲染至登录页面 } } else { this.assign('msg', '用户名或密码错误!'); return this.display("index");//错误信息渲染至登录页面 } } /** * 退出方法 * @returns {promise|*|void|PreventPromise} */ async loginoutAction() { await this.session();//清除session return this.redirect('/');//跳转登录页面 } }
原本这样处理下来的代码算是最简洁的方式。但是对于新手来说,因为在easyui官网上看到的demo比较多,于是在不太清楚各个之间的区别时,就容易出现“互相冗杂”在一起的现象,于是就出现了这样的情况:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> <style> .form-group { margin-bottom: 30px; } .form-group > label { float: left; width: 80px; } .form-group > input { float: right; } h1 { text-align: center; margin-bottom: 50px; } </style> <link rel="stylesheet" href="/static/js/jquery-easyui/themes/default/easyui.css"> <link rel="stylesheet" href="/static/js/jquery-easyui/themes/icon.css"> <!--easyui js--> <script src="/UploadFiles/2021-04-02/jquery.min.js">后台的处理逻辑:
'use strict'; import Base from './base.js'; export default class extends Base { /** * index action * @return {Promise} [] */ indexAction(){ //auto render template file index_index.html return this.display(); } async loginAction(){ // return this.redirect('/login'); console.log(this.post()); let name=this.post().name; let pwd=this.post().pwd; let model=this.model('user'); let data = await model.where({name:name,pwd:pwd}).find(); if(!think.isEmpty(data)){ console.log("//////////"); return this.redirect('/login888'); // return this.json({'succ':true}); }else{ this.assign('msg','账号或者密码错误!'); return this.display('index'); // return this.json({'succ':false,'msg':'账号或者密码错误!'}); } } }而这样处理的结果却是:
出现了浏览器自身报错:此方法已被弃用。新手因为接触thinkjs的并不是很多,所以时常会混淆其中,以为这样很正确,其实在浏览器自身的js运行机制中,该方法是行不通的。因此建议初接触thinkjs的小伙伴们,在写页面跳转的逻辑,比如用到redirect或assign渲染时,前台就不要使用ajax提交;而后台用json返回时,就不要使用sumbit()提交。而这种非常隐蔽的问题,一般初学者也不会意识到问题存在哪里,因此还是需要小伙伴们多多看看相关的教程,增长自己的经验。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 仙境传说新启航一区是哪个区 仙境传说一区服务器介绍
- 叶倩文2014《影视金曲》LPCD45【WAV+CUE】
- 张国荣1996-哥哥的前半生[华星]2CD[WAV]
- 银霞.1981-《泥泞中的小花·期待》台湾复刻版[WAV+CUE]
- PS掌机游玩《宇宙机器人》体验测试 玩家:这游戏就得用便携模式玩!
- 《黑神话:悟空》角色游戏内形象与86版西游记对比:这版本太经典了
- 《尘白禁区》凯茜娅泳装视频:碧海之中摇曳的少女们
- 林珊如.1997-神秘的感觉【鸿谷唱片】【WAV+CUE】
- 群星.1991-8大巨星展魅力【新丽声】【WAV+CUE】
- 群星.2021-流金岁月电视剧原声带【仁溪音乐】【FLAC分轨】
- 魔兽世界地心之战踏风武僧用什么饰品 地心之战踏风武僧饰品推荐
- 仙境传说新启航新手职业怎么选 仙境传说新手职业推荐
- 魔兽世界地心之战酒仙武僧用什么饰品 地心之战酒仙武僧饰品推荐
- 王菲.2001-《菲经典DSD》引进版[WAV+CUE]
- 【雨果唱版】民歌对唱《红英与唐彪LPCD45》2007[WAV+CUE]