学习Koa框架开发Restful API服务-续集

举报
zekelove 发表于 2021/08/09 23:35:47 2021/08/09
【摘要】 在上一篇文章 《利用Node.js的Koa框架开发Restful API服务》中讲解了Node.js的安装及环境配置,npm的简单使用,Koa框架脚手架和常用的中间件介绍。这篇文章我们就来详细搭建一个API服务框架,以及Koa的常用中间件的使用。

在上一篇文章 《利用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");
});
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。