学习Koa框架开发Restful API服务-续集
在上一篇文章 《利用Node.js的Koa框架开发Restful API服务》中讲解了Node.js的安装及环境配置,npm的简单使用,Koa框架脚手架和常用的中间件介绍。这篇文章我们就来详细搭建一个API服务框架,以及Koa的常用中间件的使用。
项目结构
koa-api --项目工程名称
controller -- 控制器
config -- 配置文件
model -- 模型实体对象
routers -- 路由
static -- 静态资源
utils -- 工具库
app.js -- 项目启动文件
控制器
处理程序方法指定URL映射,处理业务逻辑,响应用户请求,获取请求数据,返回数据。
在文件夹 controller 里面创建一个用户控制器(UserController.js),
/**
*用户模块控制器 UserController
*/
const result = require('../model/Result');
class UserController {
// 用户信息
async userInfo(ctx, next) {
//TODO 获取用户信息
// 模拟请求回来的数据
result.code = 1;
result.data = { name: 'admin', pwd: "12346" };
result.msg = "提交成功";
ctx.body = result
}
}
module.exports = new UserController();
实体模型
对应数据库中的表结构实体,也可以自定义通用实体对象。
在文件夹 model 里面创建统一返回的数据对象(Result.js)和 用户信息(UserInfo.js)
/**
* 返回Response实体:Result
*/
module.exports = {
code: 0,
data: null,
msg: ""
}
路由(koa-router)
路由就是可以通过URL访问,传递参数,通过get,post等方式发送和获取数据。
在文件夹 routers 里面创建路由文件(index.js)
/**
* 路由配置
*/
const Router = require('koa-router');
const userCtrl = require('../controller/UserController');
const config = require('../config');
// 设置路由统一 api 前缀
let router = new Router({
prefix: config.apiPrefix
});
// 用户模块
router.get('/user/userinfo', userCtrl.userInfo);
module.exports = router;
静态资源(koa-static)
静态Web托管服务 koa-static 中间件主要是用来处理静态资源,可以直接通过 URL 访问文件,如:图片,样式,Javascript,JSON文件等,还可以设置图片缓存。
/**
* 在启动文件 app.js 加入
*/
const static = require('koa-static');
// 配置静态资源文件
const staticPath = './static';
app.use(static(
path.join(__dirname, staticPath)
));
工具库(tools)
将项目需要用到的一些公共方法封装成类库,如:Cookie,sessionStorage,localStorage,axios等
在文件夹 utils 里面创建工具库文件(tools.js,request.js)
// 写 cookies
export let setCookie = function setCookie(name, value, time) {
if (time) {
let strsec = getsec(time)
let exp = new Date()
exp.setTime(exp.getTime() + parseInt(strsec))
document.cookie =
name + '=' + escape(value) + ';expires=' + exp.toGMTString()
} else {
document.cookie = name + '=' + escape(value)
}
}
// 读 cookies
export let getCookie = function(name) {
let reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
let arr = document.cookie.match(reg)
return arr ? unescape(arr[2]) : null
}
// 删 cookies
export let delCookie = function(name) {
var exp = new Date()
exp.setTime(exp.getTime() - 1)
var cval = getCookie(name)
if (cval != null) {
document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
}
}
配置文件
用来管理和设置项目中用到一些公共常量参数的值,如:数据库配置,日志配置,第三方请求服务等内容。
在文件夹 config 里面创建配置文件(index.js)
/**
* 配置文件:数据库配置/日志配置/服务配置/......
*/
/**
* 设置 API 统一路径前缀
*/
const apiPrefix = "/api";
/**
* MySql 数据库配置
*/
const dataBase = {
port: 3000, // 项目启动端口号
database: { // 数据库配置信息
host: 'localhost',
port: '3306',
user: 'root',
password: '123456',
database: 'test'
}
};
module.exports = {
apiPrefix,
dataBase
};
启动文件 app.js
这个是项目的启动文件,也是最重要的内容,会把其它模块的东西在这里面初始化加载。如:路由加载,静态资源加载,日志模块加载,跨域模块,启动监听端口等内容。
const Koa = require('koa');
const path = require('path');
const logger = require('koa-logger'); // 日志中间件
const Router = require('koa-router'); // 路由中间件
const bodyParser = require('koa-bodyparser'); //上下文解析
const static = require('koa-static'); //静态资源服务
const cors = require('koa-cors'); //跨域访问组件
const registerRouters = require('./routers'); // 路由服务
const app = new Koa();
app.use(cors()) // 允许跨域访问
app.use(logger()); // 运行日志内容自定义
app.use(bodyParser()); // 解析body
// 配置静态资源文件
const staticPath = './static';
app.use(static(
path.join(__dirname, staticPath)
));
// 根路径服务
let routerHome = new Router();
routerHome.get('/', async(ctx, next) => {
ctx.body = '欢迎学习Koa API!';
});
// 装载所有路由
app.use(routerHome.routes()).use(routerHome.allowedMethods());
app.use(registerRouters.routes()).use(registerRouters.allowedMethods());
// 启动监听端口
app.listen(3000, () => {
console.log('Koa api starts at port 3000');
console.log("API访问:http://localhost:3000");
});
- 点赞
- 收藏
- 关注作者
评论(0)