【搭建博客服务端部分】第五部分 博客接口

导读:本篇文章讲解 【搭建博客服务端部分】第五部分 博客接口,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

【搭建博客服务端部分】第五部分 博客接口



5. 博客接口

const express = require('express')
const { db, genid } = require('../db/dbUtils')
const dayjs = require('dayjs')
// 创建路由
const router = express.Router()

// 编写路由
// 添加博客的接口
router.post('/_token/add', (req, res) => {
    const { title, content, categoryId } = req.body
    const id = genid.NextId()
    const createTime = new Date().getTime()
    const update_sql = "INSERT INTO `blog` (`id`,`title`,`content`,`category_id`,`create_time`) VALUES (?,?,?,?,?)"
    db.async.run(update_sql, [id, title, content, categoryId, createTime]).then(({ error }) => {
        if (!error) {
            res.send({
                code: 200,
                msg: '添加成功!'
            })
        } else {
            res.send({
                code: 500,
                msg: '添加失败!'
            })
        }
    })
})

// 删除博客的接口
router.delete('/_token/delete', (req, res) => {
    const { id } = req.body
    const del_sql = "DELETE FROM blog WHERE id = ?"
    db.async.run(del_sql, [id]).then(({ error }) => {
        if (!error) {
            res.send({
                code: 200,
                msg: '删除成功!'
            })
        } else {
            res.send({
                code: 500,
                msg: '删除失败!',
                error
            })
        }
    })
})

// 修改博客的接口
router.put('/_token/update', (req, res) => {
    const { id, title, content, categoryId } = req.body
    const update_sql = "UPDATE blog SET title = ? , content = ? ,category_id = ?,create_time = ? WHERE id = ?"
    const createTime = new Date().getTime()
    db.async.run(update_sql, [title, content, categoryId, createTime, id]).then(({ error }) => {
        if (!error) {
            res.send({
                code: 200,
                msg: '修改成功!'
            })
        } else {
            res.send({
                code: 500,
                msg: '修改失败!',
                error
            })
        }
    })
})

// 查询博客的接口
// 这一块需要考虑的地方很多
router.get('/search', async (req, res) => {
    let { keyword, page, pageSize, categoryId } = req.query
    keyword = keyword === undefined ? '' : keyword
    page = page === undefined ? 1 : page
    pageSize = pageSize === undefined ? 10 : pageSize
    categoryId = categoryId === undefined ? 0 : categoryId
    // 2. 在这里需要去拼接sql语句和参数
    let params = []
    let whereSql = []

    // 判断是否选择分类
    if (categoryId != 0) {
        // 这里注意前后留空格,避免拼接的时候出现很多的问题
        whereSql.push(" category_id = ? ")
        params.push(categoryId)
    }

    // 判断是否传入关键字
    if (keyword != '') {
        // 只要在title和content中有出现过的都筛选出来
        whereSql.push(" (title LIKE ? OR content LIKE ?) ")
        params.push("%" + keyword + "%")
        params.push("%" + keyword + "%")
    }

    // 判断是否有传入筛选的条件
    let whereSqlStr = ''
    if (whereSql.length) {
        // 筛选条件在进行拼接
        whereSqlStr = " WHERE" + whereSql.join(' AND ')
    }

    // 整合全部条件和参数
    let str = "SELECT * FROM blog" + whereSqlStr + " ORDER BY create_time DESC LIMIT ?,? "
    // 这里多了两个参数,用于限制页码
    /*
        limit 0 10 表示的是从第0条开始,展示10个内容
        page      1      2       3
        pageSize  10     10      10
        limit   0 10   10 10   20 10
    */
    let searchParams = params.concat([(page - 1) * pageSize, pageSize])

    // 计算出总的符合条件的信息条数
    let totalSql = "SELECT count(*) FROM blog" + whereSqlStr

    // 查询符合条件的数据
    let searchData = await db.async.all(str, searchParams)

    // 查询总的信息数
    let total = await db.async.all(totalSql, params)

    if (searchData.error == null && total.error == null) {
        res.send({
            code: 200,
            msg: '查询成功!',
            data: {
                keyword,
                page,
                pageSize,
                categoryId,
                rows: searchData.rows,
                total: total.rows[0].count
            }
        })
    } else {
        res.send({
            code: 500,
            msg: '查询失败!'
        })
    }
})


module.exports = router

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/82840.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!