利用expressJS编写reset api

expressJS是个很轻量且简单的JavaScript后端框架,基于nodeJS开发。可以利用express简单的就可以输出reset api,当然它可以连接任意数据库。

一、准备工作

1、安装nodeJS(请自行安装)

2、安装express-generator(采用全局安装)

npm install express-generator -g

3、创建项目(我采用的是ejs模板引擎)

express --view=ejs myapp

4、连接mysql,请自行安装mysql数据库,我们需要安装mysql依赖

npm i mysql

创建数据库名为chat并创建数据库表:


`CREATE TABLE IF NOT EXISTS message(
            id char(100) PRIMARY KEY,
            from_user_id int(20) NOT NULL,
            to_user_id int(20) NOT NULL,
            read_status int(1) NOT NULL DEFAULT 0,
            content text NOT NULL,
            create_time timestamp NOT NULL DEFAULT NOW()
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`

二、数据库连接编写

dbConfig.js


const db = require('mysql')
const connection = db.createPool({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'chat'
})

const testMysqlConnection = () => {
    return new Promise((resolve, reject) => {
        // 测试mysql是否已经连接成功
        connection.query('SELECT 1 + 1 AS solution', (err, rows, fields) => {
            if(err) {
                reject({status: 0, err})
            }
            resolve({status: rows[0].solution})
        })
    })
}

module.exports = {connection, testMysqlConnection}

三、reset api编写(增删改查)

msgModel.js


const db = require('../config/dbConfig').connection

const chat = {
    // 分页查询所有聊天记录
    getAllMsg: (params) => {
        return new Promise((resolve, reject) => {
            // 传入页码、数量
            let currentPage = params.currentPage ? +params.currentPage : 1
            let pageSize = params.pageSize ? +params.pageSize : 10
            let count_sql = 'select COUNT(*) from users'
            let sql='select SQL_CALC_FOUND_ROWS * from message order by create_time desc limit ' + (currentPage - 1) + ',' + pageSize
            db.query(count_sql, (c_err, c_rows) => {
                if(err){
                    reject({
                        status: 0,
                        data: [],
                        message: c_err
                    })
                }
                db.query(sql, (err, rows) => {
                    if(err) {
                        reject({
                            status: 0,
                            data: [],
                            message: err
                        })
                    }
                    resolve({
                        status: 2,
                        data: rows,
                        count: c_rows[0]['COUNT(*)'],
                        message: 'Get all message'
                    })
                })
               
            })
        })
    },
    getMsgById: (_msg) => {
        // 由于消息数量可能会过多,因此需要进行分页,分页条数为50条
        return new Promise((resolve, reject) => {
            let currentPage = _msg.currentPage ? _msg.currentPage : 1
            let pageSize = 50
            let id = _msg['id']
            let count_sql = 'select COUNT(*) from message where id like "'+ id +'%"'
           
            db.query(count_sql, (c_err, c_rows) => {
                if(c_err) {
                    reject({
                        status: 0,
                        data: [],
                        message: c_err
                    })
                }
                // 计算页数总数
                let pages
                let pageStart
                if(c_rows && c_rows[0]['COUNT(*)']) {
                    pages = Math.ceil(c_rows[0]['COUNT(*)'] / pageSize)
                }
                if(pages) {
                    pageStart = (+pages - +currentPage) <0 ? 1 : (+pages - +currentPage)
                }else {
                    pageStart = 0
                }
                let sql='select * from message where id like "'+ id +'%" order by create_time asc limit ' + (pageStart * pageSize) + ',' + pageSize
                console.log(pages, sql)
                db.query(sql, [id], (err, rows) => {
                    if(err) {
                        reject({
                            status: 0,
                            data: [],
                            message: err
                        })
                    }
                    resolve({
                        status: 2,
                        data: rows,
                        count: c_rows[0] && c_rows[0]['COUNT(*)'] ? c_rows[0]['COUNT(*)'] : [],
                        message: 'Get all message'
                    })
                })

            })
        })
    },
    // 获取未读状态的信息id
    getMsgByStatus: (id) => {
        return new Promise((resolve, reject) => {
            let sql = 'select id,from_user_id,to_user_id from message where read_status = 0 and id like "%' + id + '%"' // (id like "%'+ '_'+id +'%" or id like "%'+ id+'_' +'%")
            // console.log('sql', sql)
            db.query(sql, (err, rows) => {
                if(err) {
                    reject({
                        status: 0,
                        data: [],
                        message: err
                    })
                }
                let newData = []
                let data = []
                if(rows && rows.length>0) {
                    for(let i = 0; i < rows.length; i++){
                        rows[i]['unreadMessage'] = 1
                        newData.push(rows[i])
                    }
                }
                let addUnreadMsgHaveSameId = (array) => {
                    const hash = {};
                    array.map(item => {
                        const id = item['to_user_id'];
                        if (hash[id]) {
                            hash[id]['unreadMessage'] += item['unreadMessage'];
                        } else {
                            hash[id] = item;
                        }
                    });
                    return Object.values(hash);
                  }
                  console.log('rows', rows)
                  data = addUnreadMsgHaveSameId(newData)
                resolve({
                    status: 2,
                    data: data,
                    msg: 'get all unread message'
                })
            })
        })
    },
    addMsg: (_chat) => {
        return new Promise((resolve, reject) => {
            console.log(_chat)
            if(_chat.id && _chat.from_user_id && _chat.to_user_id && _chat.content){
                let sql = 'insert into message(id, from_user_id, to_user_id, content) values(?,?,?,?)'
                let chatParams = [_chat.id, _chat.from_user_id, _chat.to_user_id, _chat.content]
                db.query(sql,  chatParams, (err, rows) => {
                    if(err) {
                        reject({
                            status: 0,
                            data: [],
                            message: err
                        })
                    }
                    resolve({status: 2, data: rows, message: 'add message success'})
                })
            }else {
                resolve({
                    status: 0,
                    data: [],
                    message: 'Incomplete message information'
                })
            }
        })
    },
    updateMsgReadStatus: (_chat) => {
        return new Promise((resolve, reject) => {
            console.log('params',_chat)
            let s_sql = 'select * from message where id like "%'+ _chat.id +'%" and from_user_id=' + _chat.to_user_id
            db.query(s_sql, (s_err, s_rows) => {
                if(s_err){
                    reject({
                        status: 0,
                        data: [],
                        message: s_err
                    })
                }
                for(let i=0;i<s_rows.length;i++) {
                    let sql = 'update message set read_status = 1 where id=? and from_user_id=' + _chat.to_user_id
                    db.query(sql,[s_rows[i]['id']], (err, rows) => {
                        if(err) {
                            reject({
                                status: 0,
                                data: [],
                                message: err
                            })
                        }
                        resolve({status: 2, data: rows, message: 'update message success'})
                    })
                }
            })
        })
    },
    updateMsg: (_chat) => {
        // 更新仅能更新阅读状态以及消息内容
        return new Promise((resolve, reject) => {
            let _chatParams = [
                _chat.read_status ? _chat.read_status : 0,
                _chat.content ? _chat.content : null
            ]
            _chatParams = _chatParams.filter(item => item)
            let hasReadStatus = _chat.read_status || _chat.read_status == 0 ? 'read_status=?' : ''
            let hasContent = _chat.content ? 'content=?' : ''
            let haveTwoParams = hasReadStatus && hasContent ? ',' : ''
            let sql = 'update message set ' + hasReadStatus + haveTwoParams + hasContent + ' where id like "'+ _chat.id +'%"'
            if(_chat.id) {
                db.query(sql, _chatParams, (err, rows) => {
                    if(err) {
                        reject({
                            status: 0,
                            data: [],
                            message: err
                        })
                    }
                    resolve({status: 2, data: rows, message: 'update message success'})
                })
            }else {
                resolve({
                    status: 0,
                    data: [],
                    message: 'id is null, please check'
                })
            }
        })
    },
    deleteMsg: (_chat) => {
        // 批量删除聊天记录
        return new Promise((resolve, reject) => {
            let _ids = _chat.ids
            _ids = '"' + JSON.parse(_ids).join('","') + '"'
            let sql = 'delete from message where id in ('+ _ids +')'
            db.query(sql, (err, rows) => {
                if(err) {
                    reject({
                        status: 0,
                        data: [],
                        message: err
                    })
                }
                resolve({status:2, data: rows, message: 'delete messages success'})
            })
        })
    }
}

module.exports = chat

router/msg.js


const express = require('express');
const router = express.Router();
const chat = require('../models/msgModel');

router.get('/:id/:currentPage', (req, res) => {
    let body = req.params
    // console.log(req.body, req.params, req.query)
    chat.getMsgById(body).then(result => {
        res.json(result)
    }, err => {
        res.json(500, 'Select dababase is error')
    })
})

// add message
router.post('/', (req, res) => {
    let body = req.body
    chat.addMsg(body).then(result => {
        res.json(result)
    }, err => {
        res.json(500, 'add message is error')
    })
})

// update msg
router.put('/', (req, res) => {
    let body = req.body
    console.log(req.body, req.params, req.query)
    chat.updateMsgReadStatus(body).then(result => {
        res.json(result)
    }, err => {
        res.json(err)
    })
})

// delete msg 批量删除
router.delete('/', (req, res) => {
    // 传入一个字符串,但是格式必须为'[1,2,3,4]',以便后端解析
    console.log('req', req.body, req.params, req.query)
    let body = req.body
    chat.deleteMsg(body).then(result => {
        res.json(result)
    }, err => {
        res.json(err)
    })
})

module.exports = router

发表评论

电子邮件地址不会被公开。 必填项已用*标注