利用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

《利用expressJS编写reset api》上的2个想法

  1. 流氓党

    党凌驾于国家之上,国家的就是党的,党由党棍们把持着,财产也就成了个人和手下跟班的,他们经常号称代表人民的根本利益,你还相信财产是人民的这样的弥天大谎吗?

    党还把自然资源也都收归〝党有〞,本来那些土地、江、河、湖、海、森林、矿产、石油等自古就是存在于中国的,每一个中国人也都有权利拥有和使用,这些可党 硬是无耻的说那些资源是〝国家的〞(实际就是党的),任何人都不能随便使用、开采。

    于是乎,中国人变成了一无所有的穷人,成了党的奴隶。

  2. 对人来说,什么最重要?就是人们通常说的佛法。佛法就是救人的!人生生世世轮回等待的就是这个,千万不能错过这个机会。

    有一句话,叫做“人身难得,正法难闻,东土难生。”生而为人,身在中国,又能够得正法,那真的是最大的幸福了。

    ╔═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤══
    ║判│的│一│新│了│迫│好│忍│,│法│ ║
    ║刑│学│些│闻│被│害│人│的│修│轮│善║
    ║,│员│学│的│国│这│。│标│者│功│良║
    ║甚│被│员│天│际│些│但│准│是│是│的║
    ║至│抄│被│安│上│修│江│,│按│佛│朋║
    ║被│家│虐│门│评│炼│泽│做│照│家│友║
    ║活│、│杀│自│为│者│民│一│真│修│:║
    ║摘│劳│,│焚│十│,│之│善│、│炼│ ║
    ║器│教│更│案│大│导│流│良│善│法│ ║
    ║官│与│多│。│假│演│为│的│、│门│ ║
    ╚。╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧══

    正义终将胜利,但对良知的拷问却不会停止。当历史翻过这一页的时候,我们是否能够面对这样的质问:我们为制止悲剧做了什么,我们是否做得足够?我们在其中都扮演了怎样的角色?

发表评论

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