nodeJS與MySQL實(shí)現(xiàn)分頁(yè)數(shù)據(jù)以及倒序數(shù)據(jù)
大家在做項(xiàng)目時(shí)肯定會(huì)遇到列表類(lèi)的數(shù)據(jù),如果在前臺(tái)一下子展示,速度肯定很慢,那么我們可以分頁(yè)展示,比如說(shuō)100條數(shù)據(jù),每10條一頁(yè),在需要的時(shí)候加載一頁(yè),這樣速度肯定會(huì)變快了。
那么這里我給大家介紹如何在nodejs環(huán)境中用mysql實(shí)現(xiàn)分頁(yè)。
前面一些必要的配置我先不詳細(xì)說(shuō)了,這里主要說(shuō)的是地址池的配置
// 數(shù)據(jù)庫(kù)信息
var connection = mysql.createConnection({
host : 'localhost',
port:3306,
user : 'root',
password : '',
database : 'url',
multipleStatements: true //這里一定要加上這個(gè)。先別管什么用,一定要加上。
});
因?yàn)槲沂褂玫氖莐oa框架,所以用了async 、await 。這里不做理會(huì),下面的代碼才重要。
// 獲取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這里是前臺(tái)傳來(lái)的頁(yè)數(shù)。
2、 你可以看到sql語(yǔ)句有兩條,哈哈,這里是關(guān)鍵了,在地址池配置multipleStatements: true就是這個(gè)原因,如果你不加,就會(huì)報(bào)錯(cuò)。
3、ORDER BY id DESC 這是倒序的意思(根據(jù)id倒序)。
4、 然后我使用await 異步操作封裝了一個(gè)函數(shù),是為了能夠取到results值。當(dāng)然你使用了express就不用考慮這一點(diǎn),為啥會(huì)這樣呢?如下:
關(guān)于使用 koa路由與mysql模塊, ctx.body獲取不到值的問(wèn)題
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();
//第一類(lèi)封裝 ,一般用于不傳遞多個(gè)參數(shù)
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二類(lèi)封裝 ,一般用于傳遞多個(gè)參數(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'] = '用戶(hù)已經(jīng)存在';
json['resultCode']= 1;
} else {
json['message'] = '注冊(cè)成功';
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)
}
});
})
}
// 使用第一類(lèi)封裝
router.get( '/csdnurl', async(ctx, next) => {
var sql = "select * from csdnurl";
let results = await query(sql);
ctx.body=results
});
// 使用第一類(lèi)封裝
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
});
// 使用第二類(lèi)封裝
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是所有的頁(yè)數(shù),因?yàn)榭赡苡龅叫?shù)的情況所以向下取整加一。
6、resolve(List) 返回給前臺(tái)數(shù)據(jù)
到此這篇關(guān)于nodeJS與MySQL實(shí)現(xiàn)分頁(yè)數(shù)據(jù)以及倒序數(shù)據(jù)的文章就介紹到這了,更多相關(guān)nodeJS MySQL分頁(yè)及倒序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue+Node實(shí)現(xiàn)商品列表的分頁(yè)、排序、篩選,添加購(gòu)物車(chē)功能詳解
- NodeJs操作MongoDB教程之分頁(yè)功能以及常見(jiàn)問(wèn)題
- Node.js中Bootstrap-table的兩種分頁(yè)的實(shí)現(xiàn)方法
- nodejs mysql 實(shí)現(xiàn)分頁(yè)的方法
- nodejs個(gè)人博客開(kāi)發(fā)第六步 數(shù)據(jù)分頁(yè)
- node.js基于mongodb的搜索分頁(yè)示例
- NodeJS和BootStrap分頁(yè)效果的實(shí)現(xiàn)代碼
- nodejs分頁(yè)類(lèi)代碼分享
- node+express實(shí)現(xiàn)分頁(yè)效果
相關(guān)文章
node.js中的fs.readSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.readSync方法使用說(shuō)明,本文介紹了fs.readSync方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12
3分鐘快速搭建nodejs本地服務(wù)器方法運(yùn)行測(cè)試html/js
本篇文章主要介紹了3分鐘快速搭建nodejs本地服務(wù)器方法運(yùn)行測(cè)試html/js,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程
這篇文章主要介紹了使用 Node.js 開(kāi)發(fā)資訊爬蟲(chóng)流程,爬蟲(chóng)流程概括下來(lái)就是把目標(biāo)網(wǎng)站的HTML下載到本地再進(jìn)行數(shù)據(jù)提取。具體內(nèi)容詳情大家參考下本文2018-01-01
node.js模擬實(shí)現(xiàn)自動(dòng)發(fā)送郵件驗(yàn)證碼
這篇文章主要為大家介紹了node.js模擬實(shí)現(xiàn)自動(dòng)發(fā)送郵件驗(yàn)證碼的實(shí)例過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能實(shí)例
前端一直是一塊充滿(mǎn)驚喜的土地,不僅是那些富有創(chuàng)造性的頁(yè)面,還有那些驚贊的效果及不斷推出的新技術(shù),下面這篇文章主要給大家介紹了關(guān)于如何基于uniapp與node.js實(shí)現(xiàn)的微信授權(quán)登錄功能的相關(guān)資料,需要的朋友可以參考下2023-05-05
基于Node實(shí)現(xiàn)可以操作MySQL的接口
這篇文章主要介紹了用Node寫(xiě)個(gè)可以操作MySQL的接口,以前也用Node寫(xiě)過(guò)接口,但不涉及數(shù)據(jù)庫(kù)操作,而我們發(fā)現(xiàn),后端寫(xiě)接口,基本都繞不開(kāi)數(shù)據(jù)庫(kù)操作,感覺(jué)不寫(xiě)一個(gè)能操作數(shù)據(jù)庫(kù)的接口,就不算真正意義上學(xué)會(huì)了寫(xiě)接口,那我們今天就學(xué)習(xí)一下,如何寫(xiě)一個(gè)可以操作數(shù)據(jù)庫(kù)的接口2024-05-05

