nodeJS與MySQL實現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)

大家在做項目時肯定會遇到列表類的數(shù)據(jù),如果在前臺一下子展示,速度肯定很慢,那么我們可以分頁展示,比如說100條數(shù)據(jù),每10條一頁,在需要的時候加載一頁,這樣速度肯定會變快了。
那么這里我給大家介紹如何在nodejs環(huán)境中用mysql實現(xiàn)分頁。

前面一些必要的配置我先不詳細說了,這里主要說的是地址池的配置

// 數(shù)據(jù)庫信息
var connection = mysql.createConnection({
  host     : 'localhost',
  port:3306,
  user     : 'root',
  password : '',
  database : 'url',
  multipleStatements: true //這里一定要加上這個。先別管什么用,一定要加上。
});



因為我使用的是koa框架,所以用了async 、await 。這里不做理會,下面的代碼才重要。

// 獲取url
router.post('/csdnurl', async (ctx, next) => {
    var start = (ctx.request.body.page - 1) * 10;
    var sql = 'SELECT COUNT(*) FROM csdnurl ORDER BY id DESC; SELECT * FROM csdnurl ORDER BY id DESC limit ' + start + ',10';
    let results = await query2(sql);
    ctx.body = results
});

const query2 = function (sql) {
    return new Promise((resolve, reject) => {
        connection.query(sql, function (error, results) {
            if (error) {
                reject(error);
            } else {
                 var allCount = results[0][0]['COUNT(*)'];
                 var allPage = parseInt(allCount) / 10;
                 var pageStr = allPage.toString();
                 if (pageStr.indexOf('.') > 0) {
                     allPage = parseInt(pageStr.split('.')[0]) + 1;
                     console.log(allPage)
                 }
                 var List = results[1];
                resolve(List)
            }
        });
    })



1、ctx.request.body.page這里是前臺傳來的頁數(shù)。

2、 你可以看到sql語句有兩條,哈哈,這里是關(guān)鍵了,在地址池配置multipleStatements: true就是這個原因,如果你不加,就會報錯。

3、ORDER BY id DESC 這是倒序的意思(根據(jù)id倒序)。

4、 然后我使用await 異步操作封裝了一個函數(shù),是為了能夠取到results值。當然你使用了express就不用考慮這一點,為啥會這樣呢?我文章里有說明

5、allPage是所有的頁數(shù),因為可能遇到小數(shù)的情況所以向下取整加一。

6、resolve(List) 返回給前臺數(shù)據(jù)

作者:Vam的金豆之路

主要領(lǐng)域:前端開發(fā)

我的微信:maomin9761

微信公眾號:前端歷劫之路