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語句有兩條,哈哈,這里是關鍵了,在地址池配置multipleStatements: true就是這個原因,如果你不加,就會報錯。
3、ORDER BY id DESC 這是倒序的意思(根據(jù)id倒序)。
4、 然后我使用await 異步操作封裝了一個函數(shù),是為了能夠取到results值。當然你使用了express就不用考慮這一點,為啥會這樣呢?如下:
關于使用 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ù),因為可能遇到小數(shù)的情況所以向下取整加一。
6、resolve(List) 返回給前臺數(shù)據(jù)
到此這篇關于nodeJS與MySQL實現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)的文章就介紹到這了,更多相關nodeJS MySQL分頁及倒序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
3分鐘快速搭建nodejs本地服務器方法運行測試html/js
本篇文章主要介紹了3分鐘快速搭建nodejs本地服務器方法運行測試html/js,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-04-04
node.js模擬實現(xiàn)自動發(fā)送郵件驗證碼
這篇文章主要為大家介紹了node.js模擬實現(xiàn)自動發(fā)送郵件驗證碼的實例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04
基于uniapp與node.js實現(xiàn)的微信授權登錄功能實例
前端一直是一塊充滿驚喜的土地,不僅是那些富有創(chuàng)造性的頁面,還有那些驚贊的效果及不斷推出的新技術,下面這篇文章主要給大家介紹了關于如何基于uniapp與node.js實現(xiàn)的微信授權登錄功能的相關資料,需要的朋友可以參考下2023-05-05

