使用zig语言制作简单博客网站(五)编写博客首页数据请求响应代码

※听雨※ / 2024-08-28 / 原文

首页博客列表

前端请求代码

            Zepto(function ($) {
                // 获取首页文章列表
                $.ajax({
                    url: 'http://localhost:5588/api/home/articles',
                    type: 'GET',
                    dataType: 'json',
                    success: function (data) {
                        console.log(data);

                    },
                    error: function (err) {
                        console.log(err);
                    }
                })
            });

后端响应代码

  • 注册路由
    // 首页博客列表
    router.get("/api/home/articles", &articleController.getHomeArticles);
  • 建立 article_controller.zig 文件,代码如下
const std = @import("std");
const httpz = @import("httpz");
const article_server = @import("../server/article_server.zig");

/// 获取首页文章列表
pub fn getHomeArticles(req: *httpz.Request, res: *httpz.Response) !void {
    _ = req;
    const articles = try article_server.getHomeArticles();
    res.status = 200;
    try res.json(.{ .code = 200, .msg = "ok", .data = articles }, .{});
}
  • 建立 article_server.zig 文件,代码如下
const std = @import("std");
const database = @import("../database/db.zig");
const ArticleModel = @import("../model/article.zig");

/// 获取首页文章列表
pub fn getHomeArticles() ![]ArticleModel.Article {
    var db = try database.OpenDb();
    defer db.deinit();

    const query =
        \\SELECT id, title, description, content, istop, created_at, updated_at FROM article ORDER BY created_at DESC LIMIT 8 OFFSET 0
    ;

    var stmt = try db.prepare(query);
    defer stmt.deinit();

    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    const allocator = gpa.allocator();

    const rows = try stmt.all(
        ArticleModel.Article,
        allocator,
        .{},
        .{},
    );

    return rows;
}

运行测试效果

  • 如图