最近在学习koa2 mongoose 写两表关联 但是总感觉自己写的特别冗余 有没有大佬来指点一二 谢谢了!

发布于 2022-09-11 21:21:49 字数 3250 浏览 15 评论 0

blog_schema.js

const mongoose = require('mongoose')
const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;
const BlogSchema = new Schema({
    title: {
        required: true,
        unique: true,
        type: String
    },
    tags: [{
        type: Object
    }],
    category: {
        type: ObjectId,
        ref: 'Category'
    },
    content: {
        type: String, required: true
    },
    anthor: { type: String, required: true },
    createdAt: Date,
    updateAt: Date,
});

category_schema.js


const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CategorySchema = new Schema({
    name: {
        require: true,
        type: String,
    },
   
})

blog_controller.js

const Blog_col = require('../models/Blog');
const Category_col = require('../models/Category');

const add_blog = async (ctx, next) => {
    // 查询是否已有category
    let has_category = async (name) => {
        return await Category_col.findOne({ name: name });
    }
    // 添加category
    let add_category = async (name) => {
        return await Category_col.create({ name: name });
    }
    // 添加blog
    let add_blog = async (data) => {
        return await Blog_col.create(req);
    }
    let req = ctx.request.body; //获取请求参数
    
    let category_name = req.category || ''; 
    
    //此处判断是否有选择分类 有则添加分类后 获取分类id后将id赋值给req.category再进行添加文章 没有分类 则直接添加文章;
  
    if (!category_name) { // 没有输入分类 直接添加文章
        let result = await add_blog(req);
        if (result) {
            ctx.body = {
                code: 200,
                msg: "添加成功",
                data: result
            }
        } else {
            ctx.body = {
                code: 400,
                msg: "添加失败",
                data: result
            }
        }
    } else { //输入了分类 判断分类是否存在 存在则直接添加文章 不存在则添加分类后添加文章
        let category_id = await has_category(category_name)._id || '';
        if (!category_id) {
            category_id = await add_category(category_name)._id;
            req.category = category_id;
            let result = await add_blog(req);
            if (result) {
                ctx.body = {
                    code: 200,
                    msg: "添加成功",
                    data: result
                }
            } else {
                ctx.body = {
                    code: 400,
                    msg: "添加失败",
                    data: result
                }
            }
        } else {
            req.category = category_id;
            let result = await add_blog(req);
            if (result) {
                ctx.body = {
                    code: 200,
                    msg: "添加成功",
                    data: result
                }
            } else {
                ctx.body = {
                    code: 400,
                    msg: "添加失败",
                    data: result
                }
            }
        }
    }

}

这个只是自己练习写的 但是总是找不到思路 blog表关联了category表,是否category表也应该添加一项关联blog表 用于储存该分类所包含的文章id?

关联查询 通过populate 这个网上都能查到 但是就是设计表这些的思路 不太清晰 还有总感觉写代码的方式不太对 async 和await 的用法还是不太熟悉 可以来个大佬指点一下吗? 万分感谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

郁金香雨 2022-09-18 21:21:49
复杂做法:分类表、内容表、关联表
简单做法:分类表、内容表(冗余分类)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文