node.js编写前端接口,服务器创建、数据库连接、路由挂载,增删改查、分页查询接口的编写

1.文件准备

我们要准备三个文件来演示最基础的服务器创建、数据库连接路由挂载,增删改查、分页查询接口的编写。其中服务器创建单独一个文件为app.js,数据库连接为一个文件为pool.js,最后一个为接口所在的文件,可以根据自己的需要进行命名,这里就叫coop.js为留言的意思。需要自己准备node的express包,目录架构如下图所示。
整个文件目录架构

2.app.js文件

这个地方用于存放其他文件暴露出来的接口,挂载这里进行运行,也是创建服务器的地方。

//引入express模块
const express=require('express');
//创建web服务器
const app=express();
//引入coop路由对象
const coop=require('./routes/coop')
//设置接口响应用户
app.listen(3000,()=>{
    
    
console.log('服务器已经启动')
})
//用于使用post请求时进行传递的参数转化为对象
app.use(express.urlencoded({
    
    extended:true}));
//挂载我们引入的路由对象模块
//'/v1/coop这是前缀为了给自己的接口进行分类,发送请求时别忘记加上
//127.0.0.1:3000/'/v1/coop/
app.use('/v1/coop',coop);
//在所有的路由后面添加错误处理中间件,拦截所有的错误,拦截错误好几种这种复用比较防弊
app.use((err,req,res,next)=>{
    
    
    // err 接收路由中传递的错误信息
    console.log(err);
    //响应给客户端的错误信息
    res.send({
    
    
        code:500,
        msg:'服务器内部错误'
    })
})

3.pool.js文件

这是数据库创建连接的文件,单独编写一个文件,可以复用,需要用到的时候直接进行引入模块进行复用。这个模块都是路由接口文件引用,用于对数据库发送sql语句。

//引入mysql,哦快
const mysql=require('mysql');
//创建数据库连接池
const pool=mysql.createPool({
    
    
    host:'127.0.0.1',
    port:'3306',
    user:'root',
    password:'123456',
    database:'hantang',
    connectionLimit:15,//数据库一次最大连接数量,如果不写就默认15
    multipleStatements:true//这时允许一次发送多条sql命令
})
//暴露连接池,让其他文件使用
module.exports=pool;

4.coop.js

这是接口文件,这个接口里有,增删改,查询和分页查询用其他的文件演示

//引入express模块
const express = require('express');
//创建路由对象
const pool = require('../pool');
//引入数据库连接池
const router = express.Router();
//post请求 /add 提交留言接口 请求地址 /v1/coop/add
//一般增加也就是插入新的内容用post比较安全不会暴露用户信息
//req是请求 res响应请求  
//next是下一个的意思 express中的一个方法把错误发送到错误处理的代码块中
router.post('/add',(req,res,next)=>{
    
    
   //获取传递过来的参数体
    let obj = req.body;
    //向参数体内添加当前时间,本数据库需要,不要的可以直接删除
    obj.ctime = Date.now();
    console.log(obj);
    //向数据库发送请求 set是自动和传递参数进行匹配,匹配不到的为默认值null
    pool.query('insert into ht_cooperate set ?'),[obj],(err,req)=>{
    
    
        if (err) {
    
    
        //这个地方是把错误返回到app.js最后的代码块处理错误
            return next(err)
        }
        res.send({
    
     code: 200, msg: '留言成功' })
    })
})
//修改留言信息  put /update 修改一般用put请求
router.put('/update', (req, res, next) => {
    
    
    let obj = req.body;
    //向参数体内添加当前时间,本数据库需要,不要的可以直接删除
    obj.ctime = Date.now();
    console.log(obj);
    pool.query('update ht_cooperate set ? where cid=?', [obj,obj.cid], (err, req) => {
    
    
          //这是es6写法当{}只有一句代码时可以省略{}
        if (err) return next(err);
        console.log(req);
        //changedRows是判断是否修改为0的时候表示没修改,为1便是修改
        if (req.changedRows === 0) {
    
    
            res.send({
    
     code: 400, msg: '失败' })
        } else {
    
    
            res.send({
    
     code: 200, msg: '成功', data: req })
        }
    })
})
//删除留言 删除一般用get 速度块
router.get('/delete', (req, res, next) => {
    
    
    let obj = req.query;
    console.log(obj);
    pool.query('delete from ht_cooperate where cid=?', [obj.cid], (err, req) => {
    
    
        if (err) return next(err);
        console.log(req);
        //affectedRows是判断是否删除为0的时候表示没删除,为1便是删除
        if (req.affectedRows === 0) {
    
    
            res.send({
    
     code: 400, msg: '失败' })
        } else {
    
    
            res.send({
    
     code: 200, msg: '成功', data: req })
        }
    })
})
//以上便是接口中的增删改。

5.查询和分页查询

//新闻分类接口
//查询也是用get 速度快不怕信息暴露
router.get('/menu',(req,res,next)=>{
    
    
    let obj=req.query;
    console.log(obj);
    //ht_cat是数据库名字
    pool.query('select * from ht_cat',(err,req)=>{
    
    
        if(err){
    
    
            return next(err);
        }
        res.send({
    
    
            code:200,
            msg:'新闻分类',
            data:req
        })
    })
})
//分页查询
//查询招聘信息
router.get('/list', (req, res, next) => {
    
    
    let obj = req.query;
    obj.ctime = Date.now();
    console.log(obj);
    //判断传递的页码参数是否为空
    //这是为了展示第一页数据时就是不传参也可以正常显示
    if (!obj.pno) {
    
    
        obj.pno = 1
    }
    //判断传递的每页显示数量参数是否为空
    if (!obj.count) {
    
    
        obj.count = 2;
    }
    //计算开始查询的值
    let start = (obj.pno - 1) * obj.count;
    //将每页书记两转为数值
    let size = parseInt(obj.count);//或者写为Number(obj.count)
    // 执行sql 这里一次发送了两个sql,
    //我们在pool.js数据库连接池声明了可以一次发送多个sql命令
    //select count(*) as n from ht_job 这是给查询的结果count(*) 起了别名
    //也可以直接写select count(*) n from ht_job ,count()函数时统计总量
    pool.query('select * from ht_job limit ?,?; select count(*) as n from ht_job', [start, size], (err, req) => {
    
    
        if (err) return err;
        console.log(req);
        res.send({
    
    
            code: 200,
            msg: '查询成功',
            //因为数据库给我返回的是一个对象包含数组的形式
            //{[name:'ddd],[]}这样的形式
            data: req[0],
            tatal: req[1][0].n,//总数据量
            pages: Math.ceil(req[1][0].n / obj.count),//总页码
            pno: obj.pno//当前页码
        })
    })
})

6.总结

其实增删改查的接口套路都是一样的,主要就是sql命令的使用,和返回值的获取,get类的获取就用req.query ,post类的就用req.body获取。就分页查询比较复杂但是也是固定套路,多敲几遍就可以熟练。
注意:因为如果我们使用浏览器进行测试接口其中的put的delete请求是无法测试的,浏览器只能测试get,post两种,这里大家可以用ApiPost软件进行测试,挺好用的。
ApiPost基本使用

猜你喜欢

转载自blog.csdn.net/m0_45884629/article/details/127471622