koa2 官网
https://koa.bootcss.com/
什么是koa?
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
初始化koa项目
npm init
安装koa
npm i koa
新建一个app.js
const Koa = require('koa')
const app = new Koa()
const port = 3000
app.listen(port);
console.log(`启动成功,服务端口为:${port}`)
运行app.js
node app.js
添加启动脚本命令
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"node app.js"
}
可以运行 npm run dev 启动我们的服务。
使用 www 启动服务
在根目录建立 bin文件夹,然后新建 www文件
var app = require('../app');
var http = require('http');
var server = http.createServer(app);
server.listen('3001');
配置www启动脚本
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev":"node bin/www"
}
然后 npm run dev 就能启动了。
加点服务的返回内容
const Koa = require('koa')
const app = new Koa()
app.use(async ctx => {
ctx.body = 'Hello World';
});
const port = 3000
app.listen(port);
console.log(`启动成功,服务端口为:${port}`)
安装中间件 koa-bodyparser
这个中间件可以将post请求的参数转为json格式返回;
npm install --save koa-bodyparser
bodyparser 使用
const Koa = require('koa')
const bodyParser = require('koa-bodyparser');
const app = new Koa()
app.use(bodyParser());
app.use(async (ctx) => {
if (ctx.url === '/' && ctx.method === 'POST') {
ctx.body = ctx.request.body
} else {
ctx.body = '<h1>404!</h1>'
}
})
const port = 3000
app.listen(port);
console.log(`启动成功,服务端口为:${port}`)
开始写接口之前,我们安装一下路由 Koa-router Koa-router是 koa 的一个路由中间件,它可以将请求的URL和方法(如:GET 、 POST 、 PUT 、 DELETE 等) 匹配到对应的响应程序或页面。
npm install koa-router --save
使用koa-router
const Router = require('koa-router');
const router = new Router();
router.get('/', async (ctx) => {
ctx.type = 'html';
ctx.body = '<h1>hello world!</h1>';
})
app.use(router.routes());
app.use(router.allowedMethods({
}));
koa-router 不同请求方式
Koa-router 请求方式: get 、 put 、 post 、 patch 、 delete 、 del ,而使用方法就是 router.方式() ,比如 router.get() 和 router.post() 。而 router.all() 会匹配所有的请求方法。
router.get('/test', async (ctx) => {
ctx.type = 'html';
ctx.body = '<h1>hello world!</h1>';
})
router.get("/user", async (ctx) => {
ctx.body = '叫我詹躲躲';
})
新建router/index.js 路由文件夹
const Router = require('koa-router')
const router = new Router()
class UserController {
async getUserName(ctx) {
ctx.body = {
code: 200,
message: '叫我詹躲躲',
type: 'warning'
}
}
}
const userController = new UserController()
router.get('/test', userController.getUserName)
module.exports = router
测试一下
安装中间件 koa2-cors
cors跨域资源共享是一种机制,用来允许不同源服务器上的指定资源可以被特定的Web应用访问。
cors 安装
npm install koa-cors --save
cors 使用
const Cors = require('koa2-cors')
app.use(Cors())
koa连接数据库(mysql)
需要安装sql依赖;
npm install mysql --save
SQL配置
新建一个 sql文件夹,主要用于存放sql的各种操作;
sql/config.js
const mysqlConfig = {
user: "Koa",
password: "Koa",
database: "Koa",
host: "122.112.172.87",
port: 3306,
timezone: '08:00'
};
module.exports = mysqlConfig;
koa封装sql数据库query函数
const mysql = require("mysql");
const config = require("./config");
const pool = mysql.createPool(config);
const query = (sql, val) => {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
reject(err);
} else {
connection.query(sql, val, (err, fields) => {
if (err) {
reject(err);
} else {
resolve(fields);
}
connection.release();
});
}
});
});
};
module.exports = { query };
新增接口 - 用户信息注册 和 登录
新建两个文件夹 controller 和 model controller主要存放操作和数据处理的一些逻辑
const User = require('../model/userModel')
class UserController {
async register(ctx) {
let { name, tel, password } = ctx.request.body
const names = await User.getUser(name)
const tels = await User.getTel(tel)
if (tels.length > 0) {
ctx.body = { type: 'warning', message: '该手机号已注册' }
} else {
if (names.length > 0) {
ctx.body = { type: 'error', message: '用户名已存在' }
} else {
await User.insert(name, tel, password)
ctx.body = { type: 'success', code: 0, message: '注册成功' }
}
}
}
async login(ctx) {
let tel = ctx.request.body.tel
let password = ctx.request.body.password
const res = (await User.getTel(tel))[0]
if (res) {
if (res.password == password) {
ctx.body = {
code: 0,
data: {
name: res.name,
tel: res.tel
},
message: '登录成功',
type: 'success'
}
} else {
ctx.body = { type: 'error', message: '用户名或密码不正确' }
}
} else {
ctx.body = { type: 'error', message: '用户名不存在' }
}
}
}
module.exports = new UserController()
model中操作数据库的函数(包含数据库语句)
const query = require('../sql/query')
class UserModel {
async getUser(name) {
return await query(`SELECT * FROM user WHERE name = '${name}'`)
}
async getTel(tel) {
return await query(`SELECT * FROM user WHERE tel = '${tel}'`)
}
async insert(name, tel, password) {
return await query(`INSERT INTO user(name, tel, password) VALUES('${name}', '${tel}', '${password}')`)
}
}
module.exports = new UserModel()
在router路由文件里面注册
const Router = require('koa-router')
const router = new Router()
const UserController = require('../controller/UserController')
router.post('/register', UserController.register)
router.post('/login', UserController.login)
module.exports = router
接口调用
使用post请求就可以调用 /register 和 /login两个接口啦;当然也可以再封装其他更多的接口。
结尾
到此 用户的注册和登录接口就写完了。后续继续其他功能添加。有兴趣的可以查看源码 源码地址,一起学习,一起加油。我是叫我詹躲躲,很高兴认识你。
|