Skip to content

开发部署

注意:本章节可以跳过,充分熟练使用 yiapi 开发后再看。

请严格按照顺序操作,尤其是数据库同步操作。

每次更新依赖,一定要记得及时同步系统表结构!!!

开发流程

  1. tables 目录中设计好数据库表结构。
  2. env/.env.production 文件中配置好正式环境的 mysqlredis 连接参数。
  3. apis 目录中开发接口功能。
  4. 执行 pnpm run build 运行接口。

可以看到,使用 yiapi 开发接口功能,关键步骤只有 1 个,那就是 开发接口

再次提醒!!!

使用 yiapi 进行后端接口开发,只需要关注 1 个事情。

像其他项目一样,先设计好表结构。

然后,直接写接口。其他的一切,都不用管,yiapi 已经全部搞定!

接口开发也非常简单。

ps: 目前看不懂不要紧,后面章节会详解

接口开发

javascript
// 导入 yiapi 对象
import * as yiapi from '@yicode/yiapi';
import { metaConfig } from './_meta.js';

// 用于获取接口信息的函数
let apiInfo = await yiapi.utils.fnApiInfo(import.meta.url);

// 接口参数验证配置
export let apiSchema = {
    summary: `查询资讯列表`,
    tags: [apiInfo.parentDirName],
    description: `${apiInfo.apiPath}`,
    body: {
        type: 'object',
        title: '查询资讯列表接口',
        properties: {
            category_id: metaConfig.category_id,
            page: metaConfig.page,
            limit: metaConfig.limit,
            keyword: metaConfig.keyword
        },
        required: ['category_id']
    }
};

export default async function (fastify, opts) {
    // 创建一个 post 协议的接口,接口地址为 /news/select
    fastify.post(`/${apiInfo.pureFileName}`, {
        schema: apiSchema,
        handler: async function (req, res) {
            // 以下为接口功能逻辑
            try {
                // 查询用户是否存在
                let newsCategoryModel = fastify.mysql.table('news').modify(function (db) {
                    if (req.body.category_id > 0) {
                        db.where('category_id', req.body.category_id);
                    }
                });

                // 记录总数
                let { total } = await newsCategoryModel
                    .clone() //
                    .count('id', { as: 'total' })
                    .first();

                // 记录列表
                let rows = await newsCategoryModel
                    .clone() //
                    .orderBy('created_at', 'desc')
                    .offset(yiapi.utils.fnPageOffset(req.body.page, req.body.limit))
                    .limit(req.body.limit)
                    .select();

                // 查询成功,返回数据
                return {
                    ...yiapi.httpConfig.SELECT_SUCCESS,
                    data: {
                        total: total,
                        rows: rows,
                        page: req.body.page,
                        limit: req.body.limit
                    }
                };
            } catch (err) {
                // 查询失败,回滚数据
                fastify.log.error(err);
                return yiapi.httpConfig.SELECT_FAIL;
            }
        }
    });
}

部署

yiapi 使用 pm2 进行正式环境的部署和管理

ps: pm2 的知识要你自己去学习了解,本教程只有 yiapi 使用教程。

全局安装 pm2

bash
npm install -g pm2

正式环境运行

bash
npm run build

反向代理https静态文件托管

推荐使用 caddy ,简单、方便、高效,自动配置域名的 https

配置文件 Caddyfile 写法参考:

bash
# 静态资源托管
https://yicode.tech, https://www.yicode.tech {
	root * /wwwroot/yicode.tech/site

	file_server
}

# 接口反向代理
https://api.yicode.tech {
	reverse_proxy /* http://127.0.0.1:3000 {
		header_up Host {http.reverse_proxy.upstream.hostport}
		header_down Access-Control-Allow-Headers *
		header_down Access-Control-Allow-Origin *
	}
}

总结

使用 yiapi 开发后端接口就是这么简单,全部围绕着 开发业务接口 来进行。

真正做到了简单易用,方便快捷!