Vue中axios请求后res返回204,no content,res.data为undefind

发布时间 2023-04-07 09:55:22作者: xiaoxiaowu1314

一直以为后台只要返回200-299之间的状态码就没问题,就是这个错误认知,花了三个小时终于想到解决办法

附上axios  地址  axios中文文档|axios中文网 | axios (axios-js.com)

前面一直想着后台能接收处理请求,肯定不是后台问题,一直花时间配置前端请求指令,以及设置响应拦截器查看情况。突然想到其实是自己在后台设置了响应状态码就是204

router.get('/getGoods', async (ctx, next) => {
    try {
        let SearchLoststatus = 11;
        let SearchLoststatusMessage = ''
        let SearchFoundstatus = 11;
        let SearchFoundstatusMessage = ''
        let LostMessage = {}
        //wu_dehong.`lost_list`
        let FoundMessage = {}
        //wu_dehong.`found_list`
        await new Promise((resolve, reject) => {
            pool.query('select * from wu_dehong.`lost_list` where isdelete=0;', (err, result) => {
                if (err) {
                    SearchLoststatus = 500;
                    SearchLoststatusMessage = '数据库查询 失物 信息失败'
                    console.log('数据库查询失物信息失败')
                    reject()
                    return
                }

                if (result.length == 0) {//错误演示,改为100,成功运行返回响应体
                    SearchLoststatus = 200;
                    SearchLoststatusMessage = '数据库中未删除的失物信息为空'
                    console.log('数据库中未删除的失物信息为空')

                } else {//错误演示,改为100,成功运行返回响应体
                    SearchLoststatus = 201;
                    SearchLoststatusMessage = '查询未删除的失物信息  成 功'
                    // console.log(result)

                    LostMessage = { ...result }

                }
                resolve()
            })
        })
        /* await new Promise((resolve, reject) => {
            if (Object.getOwnPropertyNames(LostMessage).length == 0) {
                reject()
                return
            }
            resolve()
            for (let key in LostMessage) {
                fs.readFileSync(`${LostMessage[key].img}`, 'utf8', function (err, result) {
                    if (err) {
                        return console.log('读取失物图片信息失败!', err)
                    }
                    if (result) {
                        LostMessage[key].img = result
                    }
                })
            }

        }) */

        await new Promise((resolve, reject) => {
            pool.query('SELECT * FROM wu_dehong.found_list where isdelete=0;', (err, result) => {
                if (err) {//错误演示,改为100,成功运行返回响应体
                    SearchFoundstatus = 0;
                    SearchFoundstatusMessage = '数据库查询 招领 信息失败'
                    console.log('数据库查询 招领 信息失败')
                    reject()
                    return
                }

                if (result.length == 0) {
                    SearchFoundstatus = 1
                    SearchFoundstatusMessage = '数据库中未删除的招领信息为空'
                    console.log('数据库中未删除的招领信息为空')
                } else {//错误演示,改为100,成功运行返回响应体
                    SearchFoundstatus = 3
                    SearchFoundstatusMessage = '查询未删除的招领信息  成 功'
                    // console.log(result)
                    FoundMessage = { ...result }
                }
                resolve()
            })
        })
        /* await new Promise((resolve, reject) => {
            if (Object.getOwnPropertyNames(FoundMessage).length == 0) {
                reject()
                return
            }
            resolve()
            for (let key in FoundMessage) {
                fs.readFileSync(`${FoundMessage[key].img}`, 'utf8', function (err, result) {
                    if (err) {
                        return console.log('读取招领图片信息失败', err)
                    }
                    if (result) {
                        FoundMessage[key].img = result
                    }
                })
            }

        }) */
//我说为什么总是返回204,res.data为undefind,排查下来原来是自己挖坑
        ctx.response.status = SearchLoststatus + SearchFoundstatus
        ctx.response.statusMessage = SearchLoststatusMessage + '————' + SearchFoundstatusMessage

        ctx.response.body = {
            LostMessage,
            FoundMessage
        }
        console.log(ctx.response.body)
        // Object.getOwnPropertyNames(obj).length==0

    } catch (error) {
        console.log(error, '初始化搜索物品信息GET请求失败')
    }
})