nodeJS與MySQL實(shí)現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)
大家在做項(xiàng)目時(shí)肯定會(huì)遇到列表類的數(shù)據(jù),如果在前臺(tái)一下子展示,速度肯定很慢,那么我們可以分頁展示,比如說100條數(shù)據(jù),每10條一頁,在需要的時(shí)候加載一頁,這樣速度肯定會(huì)變快了。
那么這里我給大家介紹如何在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 //這里一定要加上這個(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)傳來的頁數(shù)。
2、 你可以看到sql語句有兩條,哈哈,這里是關(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獲取不到值的問題
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();
//第一類封裝 ,一般用于不傳遞多個(gè)參數(shù)
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二類封裝 ,一般用于傳遞多個(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'] = '用戶已經(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)
}
});
})
}
// 使用第一類封裝
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) 返回給前臺(tái)數(shù)據(jù)
到此這篇關(guān)于nodeJS與MySQL實(shí)現(xiàn)分頁數(shù)據(jù)以及倒序數(shù)據(jù)的文章就介紹到這了,更多相關(guān)nodeJS MySQL分頁及倒序內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Node的Axure文件在線預(yù)覽的實(shí)現(xiàn)代碼
這篇文章主要介紹了基于Node的Axure文件在線預(yù)覽的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟
實(shí)際工作中,可能會(huì)遇到定時(shí)清除某個(gè)文件夾內(nèi)容,定時(shí)發(fā)送消息或發(fā)送郵件給指定用戶,定時(shí)導(dǎo)出某些數(shù)據(jù)等,node-schedule是一個(gè)非常不錯(cuò)的npm包,可以幫助我們快速的創(chuàng)建和管理定時(shí)任務(wù),所以本文介紹了Node.js基于node-schedule實(shí)現(xiàn)定時(shí)任務(wù)的操作步驟,需要的朋友可以參考下2024-09-09
使用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證碼
這篇文章主要介紹了利用puppeteer破解極驗(yàn)的滑動(dòng)驗(yàn)證功能,基本流程代碼實(shí)現(xiàn)給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-02-02

