mysql koa2的分页查询_koa2 快速实现注册、登录+分页(一)

koa2快速实现注册、登录+分页

配图:蓝血月全食昨天又霸占了朋友圈!

2017-03-28, Version 7.8.0 Notable Changes:fix async await desugaring in V8

自从node 7.8+发布以来,我们可以很爽的使用async await去开发了

最新的V8引擎下,NodeJs性能更好,问题更少,所以,现在普遍都在用 Node 8

今天,简单分享一下这个小而美的WEB框架:Koa2 ,技术栈:

koa 2

mysql 2

sequelize

2017年网上关于Koa2的教学太多太多,所以,本次不会讲的太啰嗦

一、版本同步及安装

Node.js 8.0 or greater

Npm 5.0 or greater

1、全局安装用于创建koa工程的cli工具

npm install -g koa-generator

2、创建一个叫作blog的工程,并使用 Ejs模板

koa2 blog -ejs

3、除了默认创建的Koa工程,还要另外安装2个数据库依赖包:

npm i -S mysql2 sequelize

4、项目结构:

+ bin

+ node_modules

+ public

+ routes

+ views

- app.js

- package.json

- package-lock.json

- readme.md

- yarn.lock

5、启动Koa2服务

npm start

浏览器预览如下:

http://localhost:3000/

view-source:

Hello Koa 2!

EJS Welcome to Hello Koa 2!

再继续阅读之前,以上步骤最好先尝试一下!

二、数据库的使用

创建3个脚本文件,用于操作实例化sequelize、封装API、添加测试数据

bin\db.js

bin\user.js

bin\userTest.js

# bin\db.js

const Sequelize = require('sequelize');

// new Sequelize('mysql://localhost:3306/database', {})

module.exports = new Sequelize('koa2', 'root', 'root', {

host: 'localhost', // 数据库地址

dialect: 'mysql', // 指定连接的数据库类型

pool: {

max: 5, // 连接池中最大连接数量

min: 0, // 连接池中最小连接数量

idle: 10000 // 如果一个线程 10 秒钟内没有被使用过的话,那么就释放线程

}

});

# bin\user.js

code ...

# bin\userTest.js

code...

用模型创建数据库表 user.js

Desktop\blog>node bin/user

sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules\sequelize\lib\sequelize.js:237:13

Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `userName` VARCHAR(255), `email` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Executing (default): SHOW INDEX FROM `users`

添加测试数据 userTest.js

Desktop\blog>node bin/userTest

sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules\sequelize\lib\sequelize.js:237:13

Executing (default): CREATE TABLE IF NOT EXISTS `users` (`id` INTEGER NOT NULL auto_increment , `userName` VARCHAR(255), `email` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;

Executing (default): INSERT INTO `users` (`id`,`userName`,`email`,`createdAt`,`updatedAt`) VALUES (DEFAULT,'saturn','vmto@qq.com','2018-02-01 05:47:52','2018-02-01 05:47:52');

Executing (default): SHOW INDEX FROM `users`

Executing (default): SELECT `id`, `userName`, `email`, `createdAt`, `updatedAt` FROM `users` AS `user` WHERE `user`.`userName` = 'saturn' LIMIT 1;

attributes [ 'id', 'userName', 'email', 'createdAt', 'updatedAt' ]

{ id: 1,

userName: 'saturn',

email: 'vmto@qq.com',

createdAt: 2018-02-01T05:47:52.000Z,

updatedAt: 2018-02-01T05:47:52.000Z

}

经过上面两步操作,数据库的users表内容如下:

id userName email createdAt updatedAt

------ -------- ----------- ------------------- ---------------------

1 saturn vmto@qq.com 2018-02-01 05:47:52 2018-02-01 05:47:52

改造路由和视图,用于操作user.js文件中封装的接口:

修改一:

routes\index.js

const User = require('../bin/user');

router.get('/', async (ctx, next) => {

let user = await User.findByName('saturn');

await ctx.render('index', {

title: 'hello index',

user: user

})

})

修改二:

views\index.ejs

EJS Welcome to

 
 

浏览器预览如下:

http://localhost:3000/

view-source:

hello index

EJS Welcome to hello index

{

"id": 1,

"userName": "saturn",

"email": "vmto@qq.com",

"createdAt": "2018-02-01T05:47:52.000Z",

"updatedAt": "2018-02-01T05:47:52.000Z"

}

近期想分享的不光是Koa2,还有adonsJs,先用Koa2热热身

毕竟她是一个极简的WEB框架

源码在 github koa2-sequelize

下一篇继续完善注册、登录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用mongoose+koa2实现分页查询的示例代码: ``` const Koa = require('koa'); const Router = require('koa-router'); const mongoose = require('mongoose'); // 连接 MongoDB 数据库 mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true }); // 创建 Schema const userSchema = new mongoose.Schema({ name: String, age: Number }); // 创建 Model const UserModel = mongoose.model('User', userSchema); // 创建 Koa 应用和路由 const app = new Koa(); const router = new Router(); // 分页查询接口 router.get('/users', async (ctx, next) => { const page = parseInt(ctx.query.page) || 1; // 当前页码,默认为1 const limit = parseInt(ctx.query.limit) || 10; // 每页显示的记录数,默认为10 const skip = (page - 1) * limit; // 跳过的记录数 const users = await UserModel.find().skip(skip).limit(limit); // 查询指定页数的记录 const total = await UserModel.countDocuments(); // 查询总记录数 const totalPages = Math.ceil(total / limit); // 计算总页数 ctx.body = { page, limit, total, totalPages, data: users }; }); // 启动应用 app.use(router.routes()).use(router.allowedMethods()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 在上面的示例中,我们创建了一个名为`users`的接口,通过`ctx.query.page`和`ctx.query.limit`来获取当前页码和每页显示的记录数。然后根据这些参数,使用`skip()`和`limit()`方法来查询指定页数的记录。最后,我们还查询了总记录数,并根据每页显示的记录数计算了总页数。最终返回的数据格式如下: ``` { "page": 1, "limit": 10, "total": 100, "totalPages": 10, "data": [ { "name": "张三", "age": 18 }, { "name": "李四", "age": 20 }, // ... ] } ``` 希望这个示例能够帮助到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值