node 练习

一、需求:实现用户的增删改查以及列表展示。

【目录结构】

【服务器代码】

const express=require('express');
// 引入用户路由器
const userRouter=require('./routers/user.js');
// 引入第三方中间件
const bodyParser=require('body-parser');
// 创建web服务器
var server=express();
server.listen(3001);
// 托管静态资源到public目录下ister.html
server.use(express.static('public'));
// 使用body-parser中间件将post请求数据解析为对象
server.use(bodyParser.urlencoded({
    extended:false
}));
// 把用户路由器挂载到/user
server.use('/user',userRouter);

【浏览器代码】

1、【user_delete.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h2>删除用户</h2>
    <form action="/user/delete" method="get">
        编号:<input type="text" name="id"><br>
        <input type="submit">    
    </form>

</body>
</html>

2、【user_detail.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/user/detail" method="get">
        名字:<input type="text" name="uname"><br>
        <input type="submit">    
    </form>

</body>
</html>

3、【user_list.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h2>用户列表</h2>
    <form action="/user/list" method="get">
        页码:<input type="text" name="pno"><br>
        数量:<input type="text" name="count"><br>
        <input type="submit">    
    </form>
</body>
</html>

4、【user_login.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h2>用户登录</h2>
    <form action="/user/login" method="post">
        用户名:<input type="text" name="uname"><br>
        密码:<input type="text" name="upwd"><br>
        <input type="submit">    
    </form>

</body>
</html>

5、【user_register.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/user/register" method="post">
        用户:<input type="text" name="uname"><br>
        密码:<input type="text" name="upwd"><br>
        邮箱:<input type="text" name="email"><br>
        手机:<input type="text" name="phone"><br>
        <input type="submit">    
    </form>

</body>
</html>

6、【user_update.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h2>用户修改</h2>
    <form action="/user/update" method="post">
        编号:<input type="text" name="id"><br>
        邮箱:<input type="text" name="email"><br>
        手机:<input type="text" name="phone"><br>
        姓名:<input type="text" name="uname"><br>
        <input type="submit">    
    </form>
</body>
</html>

【路由器代码】

//引入mysql的连接池对象
const pool=require('../pool.js');
const express=require('express');
// 创建空路由器
var router=express.Router();
// 添加路由
// 1、用户注册
router.post('/register',(req,res)=>{
    // 获取post请求的数据
    var obj=req.body;
    console.log(obj);
    // 判断用户名是否为空
    var $uname=obj.uname;
    if(!$uname){
        res.send({code:401,msg:'uname requires'});
        // 阻止继续往后执行
        return;
    }
    // 判断密码是否为空
    var $upwd=obj.upwd;
    if(!$upwd){
        res.send({code:402,msg:'upwd requires'});
        return;
    }
    // 判断邮箱否为空
    var $email=obj.email;
    if(!$email){
        res.send({code:403,msg:'email requires'});
        return;
    }
    // 判断手机是否为空
    var $phone=obj.phone;
    if(!$phone){
        res.send({code:404,msg:'phone requires'});
        return;
    }
    // 执行sql语句,将注册的数据插入到xz_user数据表中,成功响应{code:200,msg:"register suc"}
    pool.query("insert into demp(uname,upwd,email,phone) values(?,?,?,?)",[obj.uname,obj.upwd,obj.email,obj.phone],(err,result)=>{
        if (err) throw err;
        console.log(result);
        if(result.affectedRows>0){
            res.send({code:200,msg:"register success"});
        }

    });

});
// 2、用户登录的路由
router.post('/login',(req,res)=>{
    // 获取post请求的数据
    var obj=req.body;
    console.log(obj);
    // 判断数据是否为空
    var $uname=obj.uname;
    if(!$uname){
        res.send({code:401,msg:'uname requires'});
        // 阻止继续往后执行
        return;
    }
    var $upwd=obj.upwd;
    if(!$upwd){
        res.send({code:401,msg:'upwd requires'});
        return;
    }
    // 执行sql语句,查看是否登录成功(使用用户名和密码两个条件能查询到语句)
    pool.query("select * from demp where uname=? and upwd=?",[$uname,$upwd],(err,result)=>{
        if(err) throw err;
        console.log(result);
        // 判断查询的结果(数组)长度是否为0,如果大于0,说明查询到数据了
        if(result.length>0){
            res.send({code:200,msg:'login success'});
        }else{
            res.send({code:301,msg:'login err'});
        }
    });

});

// 3、检索用户
router.get('/detail',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 判断是否为空uname
    var $uname=obj.uname;
    if(!$uname){
        res.send({code:401,msg:'uname requires'});
        // 阻止继续往后执行
        return;
    }
    // 响应查询到的用户对象
    pool.query("select * from demp where uname=?",[$uname],(err,result)=>{
        if(err) throw err;
        console.log(result);
        // 判断查询的结果(数组)长度是否为0,如果大于0,说明查询到数据了
        if(result.length>0){
            res.send(result);
        }else{
            res.send({code:301,msg:'detail err'});
        }
    });
    
});

// 4、修改用户信息
router.post('/update',(req,res)=>{
    var obj=req.body;
    console.log(obj);
    // 判断是否为空
    var $id=obj.id;
    var $email=obj.email;
    var $phone=obj.phone;
    var $uname=obj.uname;
     // 判断数据是否为空
     if(!$id){
         res.send({code:401,msg:'id requires'});
         // 阻止继续往后执行
         return;
     }
     if(!$email){
        res.send({code:402,msg:'email requires'});
        // 阻止继续往后执行
        return;
     }
     if(!$phone){
        res.send({code:403,msg:'phone requires'});
        // 阻止继续往后执行
        return;
     }
     if(!$uname){
        res.send({code:405,msg:'uname requires'});
        // 阻止继续往后执行
        return;
     }
     // 执行sql语句
     pool.query('update demp set email=?,phone=?,uname=? where id=?',[$email,$phone,$uname,$id],(err,result)=>{
        if(err) throw err;
        console.log(result);
        // 判断是否更改成功
        if(result.affectedRows>0){
            res.send({cede:200,meg:'update success'});
        }else{
            res.send({code:301,msg:'update err'});
        }
     });
});

// 5、用户列表
router.get('/list',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 将数据转为数值型
    var $pno=parseInt(obj.pno);
    var $count=parseInt(obj.count);
    // 如果页码和每页的数量为空,设置默认值
    if(!$pno){
        // 如果页码为空,默认第一页
        $pno=1;   
    }
    if(!$count){
        // 如果每页数量为空,默认显示3条记录
        $count=3;
    }
    // 计算开始查询到值
    var start=($pno-1)*$count;
    // 执行sql语句,返回商品列表数据
    pool.query('select * from demp limit ?,?',[start,$count],(err,result)=>{
        if(err) throw err;
        res.send(result);
    });
});

// 6、删除用户
router.get('/delete',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 验证是否为空
    var $id=obj.id;
    if(!$id){
        res.send({code:401,msg:'id requires'});
        // 阻止继续往后执行
        return;
    }
    // 执行sql语句
    pool.query('delete from demp where id=?',[$id],(err,result)=>{
        if(err) throw err;
        if(result.affectedRows>0){
            res.send({code:200,msg:"delete success"});
        }else{
            res.send({code:200,msg:"delete err"});
        }
    });


});


// 导出
module.exports = router;

二、需求:实现商品的增删改查以及列表展示。

【目录结构】

 【服务器代码】

const express=require('express');
// 引入用户路由器
const userRouter=require('./routers/user.js');
// 引入商品路由器文件
const productRouter=require('./routers/product.js');
// 引入第三方中间件
const bodyParser=require('body-parser');
// 创建web服务器
var server=express();
server.listen(3001);
// 托管静态资源到public目录下ister.html
server.use(express.static('public'));
// 使用body-parser中间件将post请求数据解析为对象
server.use(bodyParser.urlencoded({
    extended:false
}));
// 把用户路由器挂载到/user
server.use('/user',userRouter);
// 把商品路由器挂载到/product
server.use('/product',productRouter);

【浏览器代码】

【product_add.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/product/add" method="post">
        商品名称:<input type="text" name="pname"><br>
        商品价格:<input type="text" name="price"><br>
        商品保修:<input type="text" name="promise"><br>
        商品标题:<input type="text" name="title"><br>
        <input type="submit">    
    </form>

</body>
</html>

【product_delete.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/product/delete" method="get">
        名称:<input type="text" name="pname"><br>
        <input type="submit">    
    </form>
</body>
</html>

【product_detail.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/product/detail" method="get">
        商品名称:<input type="text" name="pname"><br>
        <input type="submit">    
    </form>
</body>
</html>

【product_list.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/product/list" method="get">
        页码:<input type="text" name="page"><br>
        数量:<input type="text" name="count"><br>
        <input type="submit">    
    </form>

</body>
</html>

【product_update.html】

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/product/update" method="post">
        名称:<input type="text" name="pname"><br>
        价格:<input type="text" name="price"><br>
        保修:<input type="text" name="promise"><br>
        标题:<input type="text" name="title"><br>
        <input type="submit">    
    </form>
</body>
</html>

【路由器代码】

const express=require('express');
// 引入连接池
const pool=require('../pool.js');
// 创建空的路由器
var router=express.Router();
// 创建路由
// 1、商品列表
router.get('/list',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 判断不为空,并设置默认值
    var $page=parseInt(obj.page);
    var $count=parseInt(obj.count);
    if(!$page) $page=1;
    if(!$count) $count=10;
    console.log($page,$count);
    // 计算开始查询到值
    var start=($page-1)*$count;
    // 执行sql语句,响应查询到的数据
    pool.query('select * from laptop limit ?,?',[start,$count],(err,result)=>{
        if(err) throw err;
        res.send(result);
    });
});

// 2、商品详情
router.get('/detail',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 判断为空
    var $pname=obj.pname;
    if($pname){
        res.send({code:401,msg:"pname requires"});
        return;
    }
    // 执行sql语句
    pool.query('select * from laptop where pname=?',[$pname],(err,result)=>{
        if(err) throw err;
        // 判断数据是否为空
        if(result.length>0){
            res.send(result);
        }else{
            res.send({code:301,msg:'detail err'});
        }

    });
});

// 3、删除商品
router.get('/delete',(req,res)=>{
    var obj=req.query;
    console.log(obj);
    // 判断为空
    var $pname=obj.pname;
    if(!$pname){
        res.send({code:401,msg:"pname requires"});
        return;
    }
    // 执行sql语句
    pool.query('delete from laptop where pname=?',[$pname],(err,result)=>{
        if(err) throw err;
        if(result.affectedRows>0){
            res.send({code:200,msg:"delete success"});
        }else{
            res.send({code:302,msg:"delete err"});
        }
    });

});

// 4、商品添加
router.post('/add',(req,res)=>{
    var obj=req.body;
    console.log(obj);
    // 遍历对象的属性批量验证是否为空
    var $code=400;
    for(var key in obj){
        $code++;
        console.log(key+'---'+obj[key])
        if(!obj[key]){
            res.send({code:$code,msg:key+" required"});
            return;
        }
    }
     // 执行sql语句
     pool.query('insert into laptop set ?',[obj],(err,result)=>{
        if(err) throw err;
        if(result.affectedRows>0){
            res.send({code:200,msg:"add success"});
        }else{
            res.send({code:302,msg:"add err"});
        }
    });
});

// 5、商品的更改
router.post('/update',(req,res)=>{
    var obj=req.body;
    console.log(obj);
    // 遍历对象的属性批量验证是否为空
    var $pname=obj.pname;
    var $code=400;
    for(var key in obj){
        $code++;
        console.log(key+'---'+obj[key])
        if(!obj[key]){
            res.send({code:$code,msg:key+" required"});
            return;
        }
    }
    // 执行sql
    pool.query('update laptop set ? where pname=?',[obj,$pname],(err,result)=>{
        if(err) throw err;
        if(result.affectedRows>0){
            res.send({code:200,msg:"update success"});
        }else{
            res.send({code:302,msg:"update err"});
        } 
    });
});


// 导出路由器
module.exports=router;
// 在app.js服务器文件中挂载到/product下;
原文地址:https://www.cnblogs.com/hd-test/p/11883451.html