nodeJS與MySQL實(shí)現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)
大家在做項目時肯定會遇到列表類的數(shù)據(jù),如果在前臺一下子展示,速度肯定很慢,那么我們可以分頁展示,比如說100條數(shù)據(jù),每10條一頁,在需要的時候加載一頁,這樣速度肯定會變快了。
那么這里我給大家介紹如何在nodejs環(huán)境中用mysql實(shí)現(xiàn)分頁。
前面一些必要的配置我先不詳細(xì)說了,這里主要說的是地址池的配置
// 數(shù)據(jù)庫信息 var connection = mysql.createConnection({ host : 'localhost', port:3306, user : 'root', password : '', database : 'url', multipleStatements: true //這里一定要加上這個。先別管什么用,一定要加上。 });
因?yàn)槲沂褂玫氖莐oa框架,所以用了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值。當(dāng)然你使用了express就不用考慮這一點(diǎn),為啥會這樣呢?如下:
關(guān)于使用 koa路由與mysql模塊, ctx.body獲取不到值的問題
var Koa = require('koa'); var Router = require('koa-router' ); var bodyParser = require('koa-bodyparser'); var mysql = require('mysql'); var app = new Koa(); var router = new Router(); app.use(bodyParser()); var connection = mysql.createConnection({ host : 'localhost', port:3306, user : 'root', password : 'xxx', database : 'url' }); connection.connect(); //第一類封裝 ,一般用于不傳遞多個參數(shù) const query = function (sql) { return new Promise((resolve, reject) => { connection.query(sql, function (error, results) { if(error){ reject(error); }else{ resolve(results) } }); }) } //第二類封裝 ,一般用于傳遞多個參數(shù) const query1 = function (userStr,name,passwd,token1) { return new Promise((resolve, reject) => { connection.query(userStr, function (error, result) { if(error){ reject(error); }else{ if (result.length > 0) { json['message'] = '用戶已經(jīng)存在'; json['resultCode']= 1; } else { json['message'] = '注冊成功'; json['token'] = token1; json['resultCode'] = 200; var insertStr = `insert into login (username, password,token) values ("${name}", "${passwd}","${token1}")`; console.log(insertStr) connection.query(insertStr, function (err, res) { if (err) throw err; }) } resolve(json) } }); }) } // 使用第一類封裝 router.get( '/csdnurl', async(ctx, next) => { var sql = "select * from csdnurl"; let results = await query(sql); ctx.body=results }); // 使用第一類封裝 router.post('/login', async (ctx, next) => { var name = ctx.request.body.username; var passwd = ctx.request.body.password; var userStr = `select username,password,token from login where username="${name}" and password="${passwd}"`; let results = await query(userStr); ctx.body = results }); // 使用第二類封裝 router.post('/register', async (ctx, next) => { var name = ctx.request.body.username; var passwd = ctx.request.body.password; var token1 = jwt.sign({ username: name }, secretkey, { expiresIn: 60 * 8 }); var userStr = `select * from login where username="${name}"`; let results = await query1(userStr,name,passwd,token1); ctx.body = json });
5、allPage是所有的頁數(shù),因?yàn)榭赡苡龅叫?shù)的情況所以向下取整加一。
6、resolve(List) 返回給前臺數(shù)據(jù)
到此這篇關(guān)于nodeJS與MySQL實(shí)現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)的文章就介紹到這了,更多相關(guān)nodeJS MySQL分頁及倒序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
3分鐘快速搭建nodejs本地服務(wù)器方法運(yùn)行測試html/js
本篇文章主要介紹了3分鐘快速搭建nodejs本地服務(wù)器方法運(yùn)行測試html/js,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04node.js模擬實(shí)現(xiàn)自動發(fā)送郵件驗(yàn)證碼
這篇文章主要為大家介紹了node.js模擬實(shí)現(xiàn)自動發(fā)送郵件驗(yàn)證碼的實(shí)例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能實(shí)例
前端一直是一塊充滿驚喜的土地,不僅是那些富有創(chuàng)造性的頁面,還有那些驚贊的效果及不斷推出的新技術(shù),下面這篇文章主要給大家介紹了關(guān)于如何基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能的相關(guān)資料,需要的朋友可以參考下2023-05-05基于Node實(shí)現(xiàn)可以操作MySQL的接口
這篇文章主要介紹了用Node寫個可以操作MySQL的接口,以前也用Node寫過接口,但不涉及數(shù)據(jù)庫操作,而我們發(fā)現(xiàn),后端寫接口,基本都繞不開數(shù)據(jù)庫操作,感覺不寫一個能操作數(shù)據(jù)庫的接口,就不算真正意義上學(xué)會了寫接口,那我們今天就學(xué)習(xí)一下,如何寫一個可以操作數(shù)據(jù)庫的接口2024-05-05