根据学习笔记一的知识点搭建的简易用户注册登录模块,用户数据暂用json保存。

HTML:

<!DOCTYPE html>
<html lang="en" dir="ltr"> <head>
<link href="bootstrap-4.0.0-dist/css/bootstrap.min.css" rel="stylesheet" />
<meta charset="utf-8">
<style>
body {
margin: 0px;
padding: 0px;
}
div{
position:absolute;
display: block;
/* border: 3px solid #116; */
border-left: 40px;
border-top: 5px;
border-bottom: 5px;
border-right: 3px;
border-style: solid;
border-radius: 5px 20px 20px 5px;
border-color: rgb(0, 123, 255);
padding:5px 10px;
left: 5px;
}
</style>
<title></title>
<script src="ajax.js" charset="utf-8"></script>
<script type="text/javascript">
window.onload=function (){
var oTxtUser=document.getElementById('user');
var oTxtPass=document.getElementById('pass');
var oBtnReg=document.getElementById('reg_btn');
var oBtnLogin=document.getElementById('login_btn'); oBtnLogin.onclick=function (){
ajax({
url: '/user',
data: {act: 'login', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')'); if(json.ok){
alert('登录成功');
}else{
alert('登录失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
}; oBtnReg.onclick=function (){
ajax({
url: '/user',
data: {act: 'reg', user: oTxtUser.value, pass: oTxtPass.value},
type: 'get',
success: function (str){
var json=eval('('+str+')'); if(json.ok){
alert('注册成功');
}else{
alert('注册失败:'+json.msg);
}
},
error: function (){
alert('通信错误');
}
});
};
};
</script>
</head> <body>
<index>
<p>Hello Node.js</p>
</index>
<div>
<input type="text" id="user" placeholder="输入用户名" class="form-control"><br />
<input type="password" id="pass" placeholder="输入密码" class="form-control"><br />
<input type="button" value="注册" class="btn btn-primary" id="reg_btn">
<input type="button" value="登陆" class="btn btn-primary" id="login_btn">
</div>
</body> </html>

ajax.js:

function json2url(json){
var arr=[];
for(var name in json){
arr.push(name+'='+json[name]);
}
return arr.join('&');
} function ajax(json){
json=json || {};
if(!json.url)return;
json.data=json.data || {};
json.type=json.type || 'get'; var timer=null; if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();
}else{
var oAjax=new ActiveXObject('Microsoft.XMLHTTP');
} switch(json.type){
case 'get':
oAjax.open('GET',json.url+'?'+json2url(json.data),true);
oAjax.send();
break;
case 'post':
oAjax.open('POST',json.url,true);
oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
oAjax.send(json2url(json.data));
break;
} oAjax.onreadystatechange=function(){
if(oAjax.readyState==4){
clearTimeout(timer);
if(oAjax.status>=200 && oAjax.status<300 || oAjax.status==304){
json.success && json.success(oAjax.responseText);
}else{
json.error && json.error(oAjax.status);
}
}
};
}

Node:

const http=require('http');
const fs=require('fs');
const querystring=require('querystring');
const urlLib=require('url'); var users={};//用来简易地存储用户数据{"blue":"123456","zhangsan":"789456","lisi":"123789"} var server=http.createServer(function(req,res){
//解析数据
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
var obj=urlLib.parse(req.url,true);
const url=obj.pathname;
const GET=obj.query;
const POST=querystring.parse(str);
//区分用户访问的是接口还是文件
if(url=='/user'){ //假设只有这一个接口,其他的都是文件
switch(GET.act){
case 'reg':
//1.检查用户名是否已经有了
if(users[GET.user]){
res.write('{"ok":false,"msg":"此用户已存在"}');
}else{ //2.插入users
users[GET.user]=GET.pass;
res.write('{"ok":true,"msg":"注册成功"}');
}
break;
case 'login':
//1.检查用户是否存在
if(users[GET.user==null]){
res.write('{"ok":false,"msg":"此用户不存在"}');
}else if(users[GET.user]!=GET.pass){//2.检查用户密码
res.write('{"ok":false,"msg":"用户名或密码有误"}');
}else{
res.write('{"ok":true,"msg":"登陆成功"}');
}
break;
default:
res.write({"ok":false,"msg":"未知的act"});
}
res.end();
}else{ //文件
//读取文件
var file_name='./www'+url;
fs.readFile(file_name,function(err,data){
if(err){
res.write('404');
}else{
res.write(data);
}
res.end();
});
}
});
});
server.listen(8080);

结果显示:

最新文章

  1. SQL Server里面如何检查没有释放的游标
  2. 程序清单8-3 8-4 演示不同的exit值
  3. mysql概要(十四)索引(补充:外键级联操作)
  4. timeZoneGetter
  5. Drozer安装
  6. Mysql中自增字段(AUTO_INCREMENT)的一些常识
  7. Ubuntu安装和配置redis
  8. CUDA_矢量相加
  9. git 创建多个账户ssh
  10. Java实现OOP(面向对象编程)
  11. Jenkins+github+maven+git+linux
  12. html的meta标签
  13. Solaris 11 配置IP地址
  14. Win10 +gtx1660 +CUDA10.0+CNDNN7.5+Tensorflow 1.13.1
  15. .class 缓存
  16. JMeter已传值但是提示为空
  17. Nodejs 和 Electron ubuntu下快速安装
  18. Java抓任意网页标题乱码jsoup解决方案一例
  19. vue父子组件写法,数据传递,顺便封装 element-ui的弹窗组建
  20. javascript的基础知识整理

热门文章

  1. 存储系列之 RAID技术原理简介
  2. 201771010120 苏浪浪 《面向对象程序设计(java)》第二周学习总结
  3. 2-SAT poj3207将边看做点
  4. WPF之数据绑定Data Binding
  5. StringUtils、CollectionUtils工具类的常用方法
  6. eatwhatApp开发实战(五)
  7. 二、React初体验之React组件创建
  8. Error C2079 &#39;CMFCPropertySheet::m_wndOutlookBar&#39; uses undefined class &#39;CMFCOutlookBar&#39;
  9. 附019.Rancher搭建及使用
  10. 利用Python进行数据分析第六季第七集