页面加载不出博客列表

来源:6-6 API对接mysql(博客列表)

大暖同学

2021-07-05

环境

node v15.14.0

直接问题

输入url后chrome页面加载不出数据,并且控制台有报错
图片描述

network显示如下信息
图片描述

问题分析:

1、数据库连接正常,查询语句没有问题,在mysql.js的exec函数中打印result可以正常显示

function exec(sql) {
    const promise = new Promise((resolve, reject) => {
        con.query(sql, (err, result) => {
            if (err) {
                reject(err)
                return
            }
            console.log(result)
            resolve(result)
        })
    })
    return promise
}

图片描述

2、推测可能是由于promise异步加载带来的问题?
在router/blog.js中打印getList的结果,终端一直提示pending

 const result = getList(author, keyword)
 console.log('router', result)
 result.then(listData => {
     return new SuccessModel(listData)
 })

图片描述

以下为相关代码

app.js

 //  处理 blog 路由
 const blogResult = handleBlogRouter(req, res)
 // console.log('blogResult', blogResult)
 if(blogResult) {
     blogResult.then(blogData => {
         res.end(
             JSON.stringify(blogData)
         )
     })
     return
 }

src/router/blog.js

// 获取博客列表
 if(method === 'GET' && path === '/api/blog/list') {
     const author = req.query.author || ''
     const keyword = req.query.keyword || ''
     // const listData = getList(author, keyword)
     // return new SuccessModel(listData)

     // 处理promise
     const result = getList(author, keyword)
     console.log('router', result)
     result.then(listData => {
         return new SuccessModel(listData)
     })
 }

src/controller/blog.js

const getList = (author, keyword) => {
    let sql = `select * from blogs where 1=1 `
    if (author) {
        sql += `and author='${author}' `
    }
    if (keyword) {
        sql += `and title like '%${keyword}%' `
    }
    sql += `order by createtime desc;`

    // 返回 promise
    return exec(sql)
}

src/db/mysql.js

// 统一执行 sql 的函数
function exec(sql) {
    const promise = new Promise((resolve, reject) => {
        con.query(sql, (err, result) => {
            if (err) {
                reject(err)
                return
            }
            resolve(result)
        })
    })
    return promise
}
写回答

4回答

双越

2021-07-05

最关键的信息在这里,你再截个图给我吧

//img.mukewang.com/szimg/60e2cc710941da2421701636.jpg

0
1
大暖同学
回复放不了图片,我把截图放在回答里啦,感谢双老师
2021-07-05
共1条回复

双越

2021-07-06

感觉这里少一个 return ,你加上试试。

//img.mukewang.com/szimg/60e3a0dd097bb53c12040986.jpg

0
1
大暖同学
果然是!谢谢老师!
2021-07-06
共1条回复

大暖同学

提问者

2021-07-05

又又老师,我还是没有解决问题

感觉这个问题很奇怪,在handleBlogRouter函数里面是可以返回博客列表的

//img.mukewang.com/szimg/60e319b009d98fdd07900548.jpg

打印信息如下

//img.mukewang.com/szimg/60e319ee09f76e4404320542.jpg

但是app.js调用这个函数就没有返回值

//img.mukewang.com/szimg/60e31a690930347507340452.jpg

打印信息如下

//img.mukewang.com/szimg/60e31a3509b8e1fb03620038.jpg

所以一开始才会直接执行到res.end(...)

0
0

大暖同学

提问者

2021-07-05

这是headers的截图

//img.mukewang.com/szimg/60e3004109a07ea524081138.jpg

0
4
weixin_慕工程1527080
回复
双越
我的Header Request URL: http://localhost:8000/api/blog/list Referrer Policy: strict-origin-when-cross-origin Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Encoding: gzip, deflate, br Accept-Language: en,en-GB;q=0.9,en-US;q=0.8,zh-CN;q=0.7,zh;q=0.6 Connection: keep-alive Host: localhost:8000 sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96" sec-ch-ua-mobile: ?0 =========================== 控制台无报错但是无法node app.js了,报错说 TypeError: Cannot read properties of undefined (reading 'host') at new ConnectionConfig (Desktop/Blogv1/node_modules/mysql/lib/ConnectionConfig.js:12:37) at Object.createConnection (Desktop/Blogv1/node_modules/mysql/index.js:13:34) at Object. (Desktop/Blogv1/src/db/mysql.js:5:19)
2021-11-17
共4条回复

Node.js+Express+Koa2+Nest.js 开发服务端

从入门到实战,一站式掌握 Node.js+Express+Koa2

4076 学习 · 2013 问题

查看课程