歡迎您光臨本站 註冊首頁

nodeJS與MySQL實現分頁數據以及倒序數據

←手機掃碼閱讀     ml5rwbikls @ 2020-06-08 , reply:0

大家在做項目時肯定會遇到列表類的數據,如果在前臺一下子展示,速度肯定很慢,那麼我們可以分頁展示,比如說100條數據,每10條一頁,在需要的時候加載一頁,這樣速度肯定會變快了。
 那麼這裡我給大家介紹如何在nodejs環境中用mysql實現分頁。

前面一些必要的配置我先不詳細說了,這裡主要說的是地址池的配置

  // 數據庫信息  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這裡是前臺傳來的頁數。

2、 你可以看到sql語句有兩條,哈哈,這裡是關鍵了,在地址池配置multipleStatements: true就是這個原因,如果你不加,就會報錯。

3、ORDER BY id DESC 這是倒序的意思(根據id倒序)。

4、 然後我使用await 異步操作封裝了一個函數,是為了能夠取到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();      //第一類封裝 ,一般用於不傳遞多個參數  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) 返回給前臺數據


[ml5rwbikls ] nodeJS與MySQL實現分頁數據以及倒序數據已經有249次圍觀

http://coctec.com/docs/mysql/show-post-237475.html