使用js知识结合express和mysql等第三方模块儿编写后台api接口

今天上午做的web实验,学完node.js的一个小练习,写这些有啥用呢。唉,简单记录一下吧

1.实验要求

  1. 用户注册:
    请求路径:http://localhost:8080/user/regist,
    请求方法为:Post请求,
    请求参数分别为:用户名,密码,重复密码,邮箱且都为字符串类型.
    返回值:布尔类型,若注册成功返回true,反之false.
  2. 用户登录:
    请求路径:http://localhost:8080/user/login,
    请求方法:Get请求,
    请求参数:用户名,密码,都为字符串类型.(有可能为空)
    返回值:用户对象.(将整个用户信息返回)
  3. 用户修改:
    请求路径:http://localhost:8080/user/update,
    请求方法:Put请求,
    请求参数:用户对象,
    返回值:新的用户对象
  4. 用户注销:
    请求路径:http://localhost:8080/user/delete,
    请求方法:Delete请求,
    请求参数:用户id,
    返回值:布尔类型
  5. 条件查找:
    请求路径:http://localhost:8080/user/list,
    请求方法:Get请求,
    请求参数:用户名称或者邮箱(模糊查询)
    返回值:用户对象的列表形式
  6. 要求:
    用户名:6-18位
    密码:8-18位,必须有大小写和特殊字符,密码和重复密码需要相同,
    邮箱:符合邮箱格式
    数据库:存储数据库时需要把密码进行加密处理,并且要有id唯一且不为空
    单斜杠、单引号、双引号,需要加上转义
    数据库自选(推荐mysql或mongodb)

2. 用到的第三方包

{
  "dependencies": {
    "express": "^4.17.1",
    "mysql": "^2.18.1"
  }
}

下载包:

npm i express@4.17.1

npm i mysql

3.代码实现

自己封装一个自定义的路由模块儿,进行路由请求的处理。

自定义的路由模块儿 myRouter.js

const express = require('express')
const router = express.Router()

const mysql=require("mysql");
const db=mysql.createPool({
    host:'127.0.0.1',
    user:'root',
    password:'123456',
    port:'3307',
    database:'table_03'
})


// 定义正则进行校验
const reg_name = /^\w{6,18}$/;
// 密码必须由大小写字母、数字、特殊字符组成
const reg_pwd=/(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[\W_]).{8,18}/;
// 邮箱
const reg_email=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

// 在这里挂载对应的路由
// 用户注册
router.post('/user/regist', (req, res) => {
    console.log("post-成功");
    //  获取参数
    const body=req.body;
    const name=body.name;
    const pwd1=body.pwd1;
    const pwd2=body.pwd2;
    const email=body.email;
    // 用户名,密码,邮箱不符合要求
    if (!reg_name.test(name)||!reg_pwd.test(pwd1)||!reg_email.test(email)) {
        res.send({
            status: "403",
            msg: 'false'
        });
    }
    else if(pwd1!=pwd2) {
        res.send({
            status: "403",
            msg: 'false'
        });
    } else {
        const sql="insert into people(name,pwd,email) values(?,?,?)";
        db.query(sql,[name,pwd1,email],(err,result)=>{
            if(err){
                res.send({
                    status: "200",
                    msg: 'true',
                    msg2:"后台注册异常!"
                });
              return console.log("sorry open fail !!!"+err.message);
           }
           if(result.affectedRows===1){
            res.send({
                status: "200",
                msg: 'true',
                msg2:"注册成功!"
                });
             }
        })    
    }
    
})

// 定义 get 接口
// 登录
router.get('/user/login', (req, res) => {
    console.log("get-成功");
  //  获取参数
  const body=req.query;
  const name=body.name;
  const pwd1=body.pwd;
  // 用户名,密码,不符合要求
  if (!reg_name.test(name)||!reg_pwd.test(pwd1)) {
      res.send({
          status: "403",
          msg: 'false'
      });
  }else{
    const sql="select * from people where name=? and pwd=?";
        db.query(sql,[name,pwd1],(err,result)=>{
            if(err){
                res.send({
                    msg:"后台查询异常!"
                });
               return console.log("sorry open fail !!!"+err.message);
           }else{
                res.send({
                    result
                });
           }
        })    
  }
})
// 定义 put 接口,更新操作是用户名,密码,邮箱均可覆盖,以id为准了

/** 请求的数据类型
{
    "id":2,
    "name":"zhangsan",
    "pwd1":"Hyl@1234",
    "pwd2":"Hyl@1234",
    "email":"1111111115@qq.com"
}
 */
// 用户修改
router.put('/user/update', (req, res) => {
    console.log("put-成功");
    //  获取参数
    const body=req.body;
    const id=body.id;
    const name=body.name;
    const pwd1=body.pwd1;
    const email=body.email;
    // console.log(id+" "+name+" "+pwd1+" "+email);
    // 用户名,密码,邮箱不符合要求
    if (!reg_name.test(name)||!reg_pwd.test(pwd1)||!reg_email.test(email)) {
        res.send({
            status: "403",
            msg: 'false'
        });
    }else{
        //做更新操作
        const sql="update people set name=?,pwd=?,email=? where id=? ";
        db.query(sql,[name,pwd1,email,id],(err,result)=>{
            if(err){
                res.send({
                    msg: '后台更新异常'
                });
              return console.log("sorry open fail !!!"+err.message);
           }
        //    res.send(result);
            // 做查询操作
            if(result.affectedRows===1){
                const sql="select * from people where name=? and pwd=?";
                db.query(sql,[name,pwd1],(err,result)=>{
                    if(err){
                        res.send({
                            msg:"后台查询异常!"
                        });
                    return  console.log("sorry open fail !!!"+err.message);
                    }else{
                        res.send({
                            result
                        });
                    }
                })    
            }else{
                res.send({
                    msg:"更新失败!"
                });
            }
     
        })    
    }
})

// 定义 DELETE 接口
router.delete('/user/delete', (req, res) => {
    console.log("delete-成功");
    //  获取参数
    const body=req.body;
    const id=body.id;
    const sql="delete from people where id=?";
    db.query(sql,[id],(err,result)=>{
        if(err){
            res.send({
                msg:"false-后台删除异常!"
            });
        return console.log("sorry open fail !!!"+err.message);
        }
        
        if(result.affectedRows===1){
             res.send({
                  msg:"true-删除成功!"
            });
            
        }else{
            res.send({
                msg:"false-删除失败!"
          });
        }
    })    

})
// 条件查找
router.get('/user/list', (req, res)=>{
    console.log("list-成功");
    const query=req.query;
    const name=query.name;
    const email=query.email;
    let sql="select * from people  ";
    // 写法比较笨,不太会sql动态拼接
   if(name!=undefined && email==undefined){
        sql+="where name like '%"+name+"%'";
   }
    else if(name==undefined && email!=undefined){
        sql+="where email like '%"+email+"%'";
   }
   else if(name!=undefined && email!=undefined){
        sql+="where name like '%"+name+"%' and email like '%"+email+"%'";
   }
   else{
        sql+="where id=0";
   }
//    console.log(sql);
   db.query(sql,(err,result)=>{
        if(err){
            res.send({
                msg:"false-后台查询出异常了!"
            });
        return console.log("sorry open fail !!!"+err.message);
        }
        // console.log(result);
            
        res.send({
            msg:result
        }); 
    })
   
})

module.exports = router

服务端启动类 Main.js

const express=require("express");
const app=express();
// 配置解析application/json格式数据的内置中间件
app.use(express.json());
//配置解析application/x-www-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({extended:false}));
// 导入自定义路由模块
const router=require("./myRouter.js");
app.use(router);
app.listen(8080,()=>{
    console.log("Running at http://localhost:8080");
})

4.总结

对第五点,模糊查询这一块儿,对自己的写法不满意,因为太死板了,参数少可以,参数多不得累死啊,还是得多了解动态sql拼接啊(本来我是想用的,但是这个过程中一直报错,实验有时间限制,所以只能这么笨啦!唉,我就是个傻蛋~~)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你可以参考下面的示例代码: ```javascript const express = require('express'); const mysql = require('mysql'); const bodyParser = require('body-parser'); const app = express(); const PORT = 3000; // 创建 MySQL 连接池 const pool = mysql.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'mydb', connectionLimit: 10 // 连接池大小,默认为 10 }); // 使用 body-parser 中间件处理 POST 请求参数 app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); // 处理 GET 请求 /search app.get('/search', (req, res) => { const { entity, attribute, keyword } = req.query; const sql = `SELECT * FROM ${entity} WHERE ${attribute} = ?`; pool.getConnection((err, connection) => { if (err) throw err; connection.query(sql, [keyword], (error, results) => { connection.release(); if (error) throw error; res.json(results); // 返回 JSON 格式的查询结果 }); }); }); // 监听 3000 端口 app.listen(PORT, () => { console.log(`Server is running on port ${PORT}.`); }); ``` 在这段代码中,我们首先引入了 Expressmysql 和 body-parser 模块,并创建了 Express 应用程序实例。然后创建了一个 MySQL 连接池,并设置了一些配置参数。接着使用 body-parser 中间件处理 POST 请求参数。最后处理了 GET 请求 /search,从 URL 参数中获取实体、属性和关键字,并构造 SQL 语句进行查询。查询结果会以 JSON 格式返回给客户端。最后监听 3000 端口,启动服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值