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
微信公眾號:前端歷劫之路