Ajax restful整合接口

在这里插入图片描述
pro/deluser.html(给userlist.html整合用)
根据id删除用户delete /pro/v1/deluser/:uid

<body>
	<input type="text" id="uid"><br>
	<button οnclick="deluser()">删除</button>
	<script>
		function deluser(){
			var $uid=uid.value;
			//1.创建xhr异步对象
			var xhr=new XMLHttpRequest();
			//4.接收响应
			xhr.onreadystatechange=function(){
				if(xhr.readyState==4&&xhr.status==200){
					var result=xhr.responseText;
					if(result==1){
						alert("删除成功");
					}else{
						alert("删除失败");
					}
				}
			}
			//2.创建请求
			xhr.open("delete","/pro/v1/deluser/"+$uid,true);
			//3.发送请求
			xhr.send();
		}
	</script>
</body>

pro/login.html
登录get url="/pro/v1/login/:uname&:upwd"
router.get("/v1/login/:uname&:upwd",funct(){});

<head>
		<script>
			function login(){
				var $uname=uname.value;
				var $upwd=upwd.value;
				if(!$uname){
					uname_msg.innerHTML="用户名不能为空";
					return;
				}
				if(!$upwd){
					upwd_msg.innerHTML="密码不能为空";
					return;
				}
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.创建监听,接收响应
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var result=xhr.responseText;
						if(result==1){
							alert("登录成功");
							location.href="userlist.html";
						}else{
							alert("登录失败");
						}
					}
				}
				//2.创建请求
				xhr.open("get","/pro/v1/login/"+$uname+"&"+$upwd,true);
				//3.发送请求
				xhr.send();

			}
		</script>
	</head>
	<body>
		<p><input type="text" id="uname" placeholder="请输入用户名"><span id="uname_msg"></span></p>
		<p><input type="text" id="upwd" placeholder="请输入密码"><span id="upwd_msg"></span></p>
		<button οnclick="login()">登录</button>
	</body>

pro/query.html
根据id修改用户信息put /pro/v1/update
根据id查询用户get /pro/v1/searchuser/:uid

	<head>
		<title></title>
		<script>
			function query(){
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.接收响应 
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var abc=xhr.responseText;//后台传过来的数组
						var obj=JSON.parse(abc);
						//console.log(obj) JSON.parse()解析的数组
						uname.value=obj.uname;
						email.value=obj.email;
						phone.value=obj.phone;
						user_name.value=obj.user_name;
						if(obj.gender==1){
							man.checked=true;
						}else{
							woman.checked=true;
						}
					}
				}
				//2.创建请求
				xhr.open("get","/pro/v1/search/"+uid.value,true);
				//3.发送请求
				xhr.send();
			}
				function update(){
				//接收gender
				var sex="0";
				if(man.checked){//man在单选框被选中了
						sex="1";
				}else{
						sex="0";
				}
				//通过地址栏获取查询字符串中的uid
				var urlParams=new URLSearchParams(location.search);
				var $uid=urlParams.get("uid");
				console.log($uid);
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.接收响应
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var result=xhr.responseText;
						if(result==1){
							alert("修改成功");
							location.href="userlist.html";//跳转修改成功的页面
						}else{
							alert("修改失败");
						}
					}
				}
				//2.创建请求
				xhr.open("put","/pro/v1/update",true);
				//3.发送请求
				xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//设置请求头信息,让请求可以传递所有字符
				var formdata=`uname=${uname.value}&email=${email.value}&phone=${phone.value}&user_name=${user_name.value}&gender=${sex}&uid=${$uid}`;//创建请求主体
				xhr.send(formdata);//发送请求,带着请求主体发送
				//注意:setRequestHeader这个方法,必须在open和send之间
			}
		</script>
	</head>
	<body>
		
		<div>
			<input type="text" id="uname">
		</div>
		<div>
			<input type="text" id="email">
		</div>
		<div>
			<input type="text" id="phone">
		</div>
		<div>
			<input type="text" id="user_name">
		</div>
		<div>
			<input type="radio" name="gender" id="man">
			<label for="man">男</label>
			<input type="radio" name="gender" id="woman">
			<label for="woman">女</label>
		</div>
		<button οnclick="query()">查询</button>
		<button οnclick="update()">修改</button>
	</body>

修改查询第二种写法

<body οnlοad="searchUser()">
<!-- 		<input type="text" id="uid"><br> -->
	<input type="text" id="uname"><br>
	<input type="text" id="email"><br>
	<input type="text" id="phone"><br>
	<input type="text" id="user_name"><br>
	<input type="radio" name="gender" id="man" value="1">男
	<input type="radio" name="gender" id="woman" value="0">女<br>



<!-- 		<button οnclick="searchUser()">查询</button> -->
	<button οnclick="updateUser()">修改</button>
	<script>
		function updateUser(){
			//第二种使用bom提供的,直接获取查询字符参数的方法
			//1.获取查询字符串对象
			var urlParams=new URLSearchParams(location.search);
			//2.通过查询字符串对象,获取uid
			var $uid=urlParams.get("uid");

			var $uname=uname.value;
			var $phone=phone.value;
			var $email=email.value;
			var $user_name=user_name.value;
			var $gender="0";
			if(man.checked){
				$gender="1";
			}else{
				$gender="0";
			}
			if(!$uname){
				alert("用户名不能为空");return;
			}
			if(!$email){
				alert("用户名不能为空");return;
			}
			if(!$phone){
				alert("用户名不能为空");return;
			}
			if(!$user_name){
				alert("用户名不能为空");return;
			}
			//1.创建异步对象xhr
			var xhr=new XMLHttpRequest();
			//4.接收响应
			xhr.onreadystatechange=function(){
				if(xhr.readyState==4&&xhr.status==200){
					var result=xhr.responseText;
					if(result==1){
						alert("修改成功");
						location.href="userlist.html";
					}else{
						alert("修改失败");
					}
				}
			}
			//2.创建请求
			xhr.open("put","/pro/v1/update",true);
			//3.发送请求
			xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			var formdata=`uid=${$uid}&uname=${$uname}&email=${$email}&phone=${$phone}&user_name=${$user_name}&gender=${$gender}`;
			xhr.send(formdata);
		}

		function searchUser(){
			//获取uid,在地址栏中的查询字符串里
			//第一种方法.location.href获取地址栏字符串,使用stringAPI截取uid
			//第二种使用bom提供的,直接获取查询字符参数的方法
			//1.获取查询字符串对象
			var urlParams=new URLSearchParams(location.search);
			//2.通过查询字符串对象,获取uid
			var $uid=urlParams.get("uid");
			//1.创建xhr异步对象
			var xhr=new XMLHttpRequest();
			//4.获取响应
			xhr.onreadystatechange=function(){
				if(xhr.readyState==4&&xhr.status==200){
					var result=xhr.responseText;
					var obj=JSON.parse(result);
					uname.value=obj.uname;
					email.value=obj.email;
					phone.value=obj.phone;
					user_name.value=obj.user_name;
					if(obj.gender==1){
						man.checked=true;
					}else{
						woman.checked=true;
					}
				}
			}
			//2.创建请求
			xhr.open("get","/pro/v1/searchuser/"+$uid,true);
	//3.发送请求
			xhr.send();
		}
	</script>
</body>

pro/reguser.html

<head>
		<script>
			var unameCheck=false;
			function reg(){
				if(unameCheck){
					
				}else{
					alert("信息格式错误");
					return;
				}
				var $uname=uname.value;
				var $upwd=upwd.value;
				var $email=email.value;
				var $phone=phone.value;
				var $user_name=uname.value;
				var $gender=-1;
				if(man.checked){
					$gender=1;
				}else if(woman.checked){
					$gender=0;
				}else{
					$gender=-1;
				}
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.创建监听,接收响应
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var result=xhr.responseText;
						alert(result);
					}
				}
				//2.创建请求,打开连接
				xhr.open("post","/pro/v1/reg",true);
				//3.发送请求
				xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
				var formdata=`uname=${$uname}&upwd=${$upwd}&email=${$email}&phone=${$phone}&user_name=${$user_name}&gender=${$gender}`;
				xhr.send(formdata);

			}
			function show_uname(){
				uname_msg.innerHTML="用户名6~12位";
			}
			function checkUname(){
				//1.非空,2.格式正确,3.格式不正确
				//2.格式正确--->用户名重复验证       
				if(!uname.value){
					uname_msg.innerHTML="用户名不能为空";
					unameCheck=false;
				}else if(uname.value.length>=6 && uname.value.length<=12){
					//1.创建xhr异步对象
					var xhr=new XMLHttpRequest();
					//4.接收响应
					xhr.onreadystatechange=function(){
						if(xhr.readyState==4&&xhr.status==200){
							var result=xhr.responseText;
							if(result==1){
								uname_msg.innerHTML="用户名不可用";
								unameCheck=false;
							}else{
								uname_msg.innerHTML="√";
								unameCheck=true;
							}
						}
					}
					//2.创建请求
					xhr.open("get","/pro/v1/queryUser/"+uname.value,true);
					//3.发送请求
					xhr.send();
				}else{
					uname_msg.innerHTML="用户名格式错误";
					unameCheck=false;
				}
			}
		</script>
	</head>
	<body>
		<p>
			<input οnblur="checkUname()" οnfοcus="show_uname()" type="text" id="uname">
			<span id="uname_msg"></span>
		</p>
		<p>
			<input type="text" id="upwd">
		</p>
		<p>
			<input type="text" id="email">
		</p>
		<p>
			<input type="text" id="phone">
		</p>
		<p>
			<input type="text" id="user_name">
		</p>
		<p>
			<input type="radio" id="man" name="gender">男
			<input type="radio" id="woman" name="gender">女
			<input checked type="radio" id="unk" name="gender">保密
		</p>
		<button οnclick="reg()">注册</button>
	</body>

pro/userlist.html
查询所有用户get /pro/v1/getall

<head>
		<script>
			function getList(){
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.创建监听,接收响应
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var result=xhr.responseText;
						var arr=JSON.parse(result);
						//html结构字符串--1
						var strHTML=`
							<table border="1" bordercolor="red">
								<tr>
									<th>用户名称</th>
									<th>用户邮箱</th>
									<th>联系方式</th>
									<th>真实姓名</th>
									<th>用户性别</th>
									<th>操作</th>
								</tr>
						`;
						//html结构字符串--2
						for(var i=0;i<arr.length;i++){
							var sex="男";
							if(arr[i].gender==1){
								sex="男";
							}else{
								sex="女";
							}
							strHTML+=`
								<tr>
								 <td>${arr[i].uname}</td>
								 <td>${arr[i].email}</td>
								 <td>${arr[i].phone}</td>
								 <td>${arr[i].user_name}</td>
								 <td>${sex}</td>
								 <td>
										<a href="query.html?uid=${arr[i].uid}">修改</a>//页面跳转uid代过去,query.html就不需要uid框,不用手填uid去修改
										<a href="javascript:deluser(${arr[i].uid})">删除</a>
								 </td>
								</tr>
							`;
						}
						//html结构字符串--3
						strHTML+="</table>";
						d1.innerHTML=strHTML;
					}
				}
				//2.创建请求
				xhr.open("get","/pro/v1/userlist",true);
				//3.发送请求
				xhr.send();
			}
			function deluser($uid){
				//1.创建xhr异步对象
				var xhr=new XMLHttpRequest();
				//4.接收响应
				xhr.onreadystatechange=function(){
					if(xhr.readyState==4&&xhr.status==200){
						var result=xhr.responseText;
						if(result==1){
							alert("删除成功");
							getList();//重新调用,刷新删除后的列表(同一个页面两次调用直接写函数)
							//调兄弟关系直接写名就行
							
						}else{

							alert("删除失败");
						}
					}
				}
				//2.创建请求
				xhr.open("delete","/pro/v1/deluser/"+$uid,true);
				//3.发送请求
				xhr.send();
			}
		</script>
	</head>
	<body οnlοad="getList()">//相当于刷新页面
		<div id="d1"></div>
	</body>

routes/pro.js
在routes文件夹中创建pro.js路由

//引入express模块
const express=require('express');
//引入连接池模块
const pool=require('../pool.js');
//创建路由器对象 
let router=express.Router();
//添加路由
//1.登录
//注:get方法可以通过地址栏获取数据,可用于检测数据是否响应成功
//注:restful的get传参:(后台定义接口,需要把参数放入接口中,没有?,添加了:)
//eg:     "/login_restful/:uname&:upwd"
router.get("/v1/login/:uname&:upwd",(req,res)=>{
	var $uname=req.params.uname;
	var $upwd=req.params.upwd;
	var sql="select * from xz_user where uname=? and upwd=?";
	//防止sql注入
	pool.query(sql,[$uname,$upwd],(err,result)=>{//执行sql语句
	//当没有查询到数据抛出err,如果获取到数据给前端响应“1”否则响应“0”
		if(err) throw err;
		if(result.length>0){
			res.send("1");
		}else{
			res.send("0");
		}
	});
});
//2.查询所有用户(用户列表)
router.get("/v1/userlist",function(req,res){
	var sql="select * from xz_user";
	pool.query(sql,(err,result)=>{
		if(err) throw err;
		res.send(result);
	});
});
//3.根据id删除用户
router.delete("/v1/deluser/:uid",(req,res)=>{
	var $uid=req.params.uid;
	var sql="delete from xz_user where uid=?";
	pool.query(sql,[$uid],(err,result)=>{
		if(err) throw err;
		res.send("1");
	});
});
//4.根据id查询用户信息
router.get("/v1/search/:uid",(req,res)=>{
	var $uid=req.params.uid;
	var sql="select * from xz_user where uid=?";
	pool.query(sql,[$uid],(err,result)=>{
		if(err) throw err;
		//console.log(result);//数组
		//console.log(result[0])
//注:首先result返回的值是一个数组对象,当查询成功后发送至前端后将此数组对象
//自动解析成JSON字符串
//这样前端就获取不到对应的数据的值,result[0]就是将其从数组中取出得到一个对象
//发送至前端,前端通过
//JOSN.parse(result)方法就能将JSON字符串转成对象最后以object.params的形式获取对应属性的值		
		res.send(result[0]);//数组的第一个元素当作响应返回去
		//两种思路
		//res.send(数组) res.send(result[0])传过去
		//前台var arr=JSON.parse(result)
		//        arr[0].uname//数组下标
		
		//res.send(对象) res.send(result)
		//前台var obj=JSON.parse(result)
		//        obj.uname//不需要数组下标的操作
	});
});
//5.根据uid修改用户信息
router.put("/v1/update",(req,res)=>{
	var $uid=req.body.uid;
	var $uname=req.body.uname;
	var $email=req.body.email;
	var $phone=req.body.phone;
	var $user_name=req.body.user_name;
	var $gender=req.body.gender;
	var sql="update xz_user set uname=?,email=?,phone=?,user_name=?,gender=? where uid=?";
	pool.query(sql,[$uname,$email,$phone,$user_name,$gender,$uid],(err,result)=>{
		if(err) throw err;
		res.send("1");
	});
});
//注册
router.post("/v1/reg",(req,res)=>{
     var obj=req.body;
     var sql="insert into xz_user set ?";
     pool.query(sql,[obj],(err,result)=>{
     if(err) throw err;
	 if(result.affectedRows>0){
	      res.send("1");
	      }else{
	      res.send("0");
	      }
	  });
 });
//导出路由器
module.exports=router;

app.js
在app.js中,路由挂载,静态资源文件夹托管

const express=require('express');
//引入路由器
const userRouter=require('./routes/user.js');
const ajaxRouter=require('./routes/ajaxdemo.js');
const proRouter=require('./routes/pro.js');
//引入body-parser中间件模块
const bodyParser=require('body-parser');
let app=express();
app.listen(8080);
//托管静态资源到public目录
app.use( express.static('./public') );
app.use( express.static('./ajax') );
app.use( express.static('./pro') );
//应用body-parser中间件
app.use( bodyParser.urlencoded({
  extended:false
}) );
//应用路由器
// /user/reg
app.use( '/user',userRouter );
app.use( '/ajax',ajaxRouter );
app.use( '/pro',proRouter );

pool.js

const mysql=require('mysql');
//创建连接池对象
let pool=mysql.createPool({
  host:'127.0.0.1',
  port:'3306',
  user:'root',
  password:'',
  database:'xz',
  connectionLimit:15
});
//导出连接池对象
module.exports=pool;
发布了54 篇原创文章 · 获赞 13 · 访问量 7744

猜你喜欢

转载自blog.csdn.net/qq_44317018/article/details/103416218
今日推荐