首页 >> js开发 >> jsnodeJS与MySQL实现分页数据以及倒序数据js大全
jsnodeJS与MySQL实现分页数据以及倒序数据js大全
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
大家在做项目时肯定会遇到列表类的数据,如果在前台一下子展示,速度肯定很慢,那么我们可以分页展示,比如说100条数据,每10条一页,在需要的时候加载一页,这样速度肯定会变快了。
那么这里我给大家介绍如何在nodejs环境中用mysql实现分页。前面一些必要的配置我先不详细说了,这里主要说的是地址池的配置
// 数据库信息
var connection = mysql.createConnection({
host
: 'localhost',
port:3306,
user
: 'root',
password : '',
database : 'url',
multipleStatements: true //这里一定要加上这个。先别管什么用,一定要加上。
});
// 数据库信息
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)
}
});
})
// 获取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这里是前台传来的页数。2、 你可以看到sql语句有两条,哈哈,这里是关键了,在地址池配置multipleStatements: true就是这个原因,如果你不加,就会报错。3、ORDER BY id DESC 这是倒序的意思(根据id倒序)。4、 然后我使用await 异步操作封装了一个函数,是为了能够取到results值。当然你使用了express就不用考虑这一点,为啥会这样呢?如下:关于使用 koa路由与mysql模块, ctx.body获取不到值的问题关于使用 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();
//第一类封装 ,一般用于不传递多个参数
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二类封装 ,一般用于传递多个参数
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'] = '用户已经存在';
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
});
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();
//第一类封装 ,一般用于不传递多个参数
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二类封装 ,一般用于传递多个参数
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'] = '用户已经存在';
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是所有的页数,因为可能遇到小数的情况所以向下取整加一。6、resolve(List) 返回给前台数据
那么这里我给大家介绍如何在nodejs环境中用mysql实现分页。前面一些必要的配置我先不详细说了,这里主要说的是地址池的配置
// 数据库信息
var connection = mysql.createConnection({
host
: 'localhost',
port:3306,
user
: 'root',
password : '',
database : 'url',
multipleStatements: true //这里一定要加上这个。先别管什么用,一定要加上。
});
// 数据库信息
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)
}
});
})
// 获取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这里是前台传来的页数。2、 你可以看到sql语句有两条,哈哈,这里是关键了,在地址池配置multipleStatements: true就是这个原因,如果你不加,就会报错。3、ORDER BY id DESC 这是倒序的意思(根据id倒序)。4、 然后我使用await 异步操作封装了一个函数,是为了能够取到results值。当然你使用了express就不用考虑这一点,为啥会这样呢?如下:关于使用 koa路由与mysql模块, ctx.body获取不到值的问题关于使用 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();
//第一类封装 ,一般用于不传递多个参数
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二类封装 ,一般用于传递多个参数
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'] = '用户已经存在';
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
});
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();
//第一类封装 ,一般用于不传递多个参数
const query = function (sql) {
return new Promise((resolve, reject) => {
connection.query(sql, function (error, results) {
if(error){
reject(error);
}else{
resolve(results)
}
});
})
}
//第二类封装 ,一般用于传递多个参数
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'] = '用户已经存在';
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是所有的页数,因为可能遇到小数的情况所以向下取整加一。6、resolve(List) 返回给前台数据
相关文章:
- jsvue+axios全局添加请求头和参数操作js大全
- js代码JavaScript React如何修改默认端口号方法详解
- jsAngular利用HTTP POST下载流文件的步骤记录js大全
- js解决vuex数据页面刷新后初始化操作js大全
- jsvue 页面回退mounted函数不执行的解决方案js大全
- jsvue项目使用$router.go(-1)返回时刷新原来的界面操作js大全
- jsElement Input输入框的使用方法js大全
- js关于angular浏览器兼容性问题的解决方案js大全
- JavaScriptthree.js欧拉角和四元数的使用方法
- js使用React-Router实现前端路由鉴权的示例代码js大全