admin 管理员组

文章数量: 887019

1.目录的结构

node_modules 保存的是下载好的所需要的包文件目录(使用npm下载
安装方法 npm install express
使用npm
npm install 包名称
自动下载到当前目录下的node_modules中
npm init -y 初始化一个package.json文件,项目说明文件,会记录安装的包的所有信息
npm install 自动安装package.json和package-lock.json中的记录的包及对应的版本号
npm官网 npmjs

)

public 保存的是静态资源(即写好的HTML页面)

app.js 入口文件

pool.js 数据库模块

routes 路由器目录

2.public 保存的是静态的html代码,通过static来直接访问这些静态资源


public文件夹下html文件
            user_detail.html文件

<h2>检索用户</h2>
<form method="get" action="/user/detail">
  编号:<input type="text" name="uid">
	<input type="submit">
</form>

                      user_list.html文件

<h2>用户列表</h2>
<form method="get" action="/user/list">
  页码:<input type="text" name="pno"><br>
	大小:<input type="text" name="count"><br>
	<input type="submit">
</form>

                      user_login.html文件

<h2>用户登录</h2>
<form method="post" action="/user/login">
  用户:<input type="text" name="uname"><br>
	密码:<input type="text" name="upwd"><br>
	<input type="submit">
</form>

                      user_reg.html文件

<h2>用户注册</h2>
<form method="post" action="/user/reg">
  用户:<input type="text" name="uname"><br>
	密码:<input type="text" name="upwd"><br>
	手机:<input type="text" name="phone"><br>
  邮箱:<input type="text" name="email"><br>
	<input type="submit">
</form>

                      user_update.html文件

<h2>修改用户</h2>
<form method="post" action="/user/update">
编号:<input type="text" name="uid"><br>
邮箱:<input type="text" name="email"><br>
电话:<input type="text" name="phone"><br>
姓名:<input type="text" name="user_name"><br>
性别:<input type="text" name="gender"><br>
<input type="submit">
</form>

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;

app.js 文件保存的是文件的主体内容,是这个服务器的入口文件

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

routes文件夹下user.js文件routes 文件下保存的是所需要的路由

下面创建的是一个user路由,在路由中实现用户信息的增删改查

const express=require('express');
//引入连接池模块
const pool=require('../pool.js');
//创建路由器对象 
let router=express.Router();
//添加路由
//1.注册路由(post /reg)
router.post('/reg',function(req,res){
  //1.1获取post请求的数据
  let obj=req.body;
  //1.2验证数据是否为空
  if(!obj.uname){
    res.send({code:401,msg:'uname required'});
	//阻止继续往后执行
	return;
  }
  if(!obj.upwd){
    res.send({code:402,msg:'upwd required'});
	return;
  }
  if(!obj.phone){
    res.send({code:403,msg:'phone required'});
	return;
  }
  if(!obj.email){
    res.send({code:404,msg:'email required'});
	return;
  }
  //1.3执行SQL命令
  pool.query('INSERT INTO xz_user SET ?',[obj],
  function(err,result){
    if(err) throw err;
	console.log(result);
  });
  res.send('注册成功');
});
//2.登录路由(post /login)
router.post('/login',function(req,res){
  //2.1获取post请求的数据
  let obj=req.body;
  //console.log(obj);
  //2.2验证数据是否为空
  if(!obj.uname){
    res.send({code:401,msg:'uname required'});
	return;
  }
  if(!obj.upwd){
    res.send({code:402,msg:'upwd required'});
	return;
  }
  //2.3执行SQL命令
  pool.query('SELECT * FROM xz_user 
  WHERE uname=? AND upwd=?',
  [obj.uname,obj.upwd],function(err,result){
    if(err) throw err;
	console.log(result);
	//结果是数组,如果数组长度大于0,找到匹配数据,
	//登录成功;
	//否则长度是0,登录失败
	if(result.length>0){
	  res.send({code:200,msg:'login suc'});
	}else{
	  res.send({code:301,msg:'login err'});
	}
  });
});
//3.检索用户(get  /detail)
router.get('/detail',function(req,res){
  //3.1获取get请求的数据(查询字符串)
  let obj=req.query;
  //console.log(obj);
  //3.2验证数据是否为空
  if(!obj.uid){
    res.send({code:401,msg:'uid required'});
	return;
  }
  //3.3执行SQL命令 
  pool.query('SELECT * FROM xz_user WHERE
   uid=?',[obj.uid],function(err,result){
    if(err) throw err;
	console.log(result);
	//判断是否查找到了用户,根据数组长度
	if(result.length>0){
	  res.send({code:200,data:result[0]});
	}else{
	  res.send({code:301,msg:'can not found'});
	}
  });
});
//4.修改用户(post /update)
router.post('/update',function(req,res){
  //4.1获取post请求的数据
  let obj=req.body;
  //console.log(obj);
  //4.2验证数据是否为空
  //遍历对象,访问每个属性
  let i=400;//记录状态码
  for(let key in obj){
	i++;//每遍历一个属性,值自动加1
	//key 属性名  obj[key]  属性值 
    //console.log(key,obj[key]);
    //如果属性值为空,提示该属性名必须提供
	if(!obj[key]){
	  res.send({code:i,msg:key+' required'});
	  return;
	}
  }
  //4.3执行SQL命令
  pool.query('UPDATE xz_user SET ? WHERE uid=?'
  ,[obj,obj.uid],function(err,result){
    if(err) throw err;
	console.log(result);
	//如果响应对象的affectedRows属性的值大于0,
	//说明修改成功,否则修改失败
	if(result.affectedRows>0){
	  res.send({code:200,msg:'update suc'});
	}else{
	  res.send({code:301,msg:'update err'});
	}
  });
});
//5.用户列表(get  /list)
router.get('/list',function(req,res){
  //5.1获取get请求的数据
  let obj=req.query;
  //console.log(obj);
  //5.2判断是否为空,如果为空设置默认值
  if(!obj.pno){
    obj.pno=1;
  }
  if(!obj.count){
    obj.count=2;
  }
  //console.log(obj);
  //5.3计算start
  let start=(obj.pno-1)*obj.count;
  //5.4每页数据量转为数值型
  obj.count=parseInt(obj.count);
  //5.5执行SQL命令
  pool.query('SELECT * FROM xz_user LIMIT ?,?',
  [start,obj.count],function(err,result){
    if(err) throw err;
	//console.log(result);
	//把查询到数组响应给浏览器
	res.send(result);
  });
});
//导出路由器
module.exports=router;

本文标签: 接口 服务器 数据库 nodejs