mongoose 如何实现一个模块查询赋值多个路由模板?

发布于 2022-09-07 20:54:26 字数 2353 浏览 29 评论 0

如何实现多个路由器引用1个mongodb的模块(或者骨架)?

简单代码例子:
路由:

 router.get('/', async (ctx, next)=> {
        await ctx.render('index',{})
    }
 );
 router.get('/about', async (ctx, next)=>{
        await ctx.render('about',{})
    },
 router.get('/content', async (ctx, next)=>  {
        await ctx.render('content',{})
    },

mongodb查询一个集合:

let mongoose = require('mongoose');
let conSchema = mongoose.Schema({

    title:{type:String},
    info:{type:String},
    keywords:{type:String},
    description:{type:String}

});

let conscModel = mongoose.model('cons',conSchema);

把查询写在路由上:

let mongoose = require('mongoose');
let conSchema = mongoose.Schema({

    title:{type:String},
    info:{type:String},
    keywords:{type:String},
    description:{type:String}

});

let conscModel = mongoose.model('cons',conSchema);

conscModel .find({},function(err,data) {data});
    
    
    
router.get('/', async (ctx, next)=> {
    await ctx.render('index',{})
});
router.get('/about', async (ctx, next)=>{
    await ctx.render('about',{})
});
router.get('/content', async (ctx, next)=>  {
    await ctx.render('content',{})
});
    

如何实现都加载?这个方法1是不行:


let conscModel = mongoose.model('cons',conSchema);
let conn =  conscModel .find({},function(err,data) {data});
    
    
    
router.get('/', async (ctx, next)=> {
      await ctx.render('index',{ web:conn   })
});
router.get('/about', async (ctx, next)=>{
       await ctx.render('about',{ web:conn})
});
 router.get('/content', async (ctx, next)=>  {
       await ctx.render('content',{ web:conn})
});
    

这个方法2是不行能实现,但是 如果其他查询是没办法写了:


let conscModel = mongoose.model('cons',conSchema);


router.get('/', async (ctx, next)=> {
     await  conscModel .find({},function(err,data) {
         ctx.render('index',{ web:conn   })
        }
    
     }
});
router.get('/about', async (ctx, next)=>{
         await  conscModel .find({},function(err,data) {
         ctx.render('about',{ web:conn   })
        }
     }
});
router.get('/content', async (ctx, next)=>  {
           await  conscModel .find({},function(err,data) {
         ctx.render('content',{ web:conn   })
        }
     }
});
    

有更好办法吗?或者更好的继承办法?

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

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

发布评论

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

评论(1

燕归巢 2022-09-14 20:54:26

分层设计
路由和模型之间加一层控制器来处理业务逻辑

//以文章为例,文章控制器
'use strict';
import ArticleModel from '../../models/article';
class Article {
    constructor() {
      //...
    }
    async getArticleById(req, res, next) {
        //查找
       let article = await ArticleModel.findOne(...);
    }

    async addArticle(req, res, next) {
       //新增
    }
    // 更新文章需要更新文章评论数
    // 删除文章
    async deleteArticle(req, res, next) {
        //删除
    }
    // 更新文章
    async updateArticle(req, res, next) {
        // 更新
        //这里可以先查找在更新,多次调用
    }
}
export default new Article();
//文章路由
'use strict';
import express from 'express';
import Article from '../controllers/blog/article';
const router = express.Router();
router.get('/article/:id',  Article.getArticleById);
router.post('/article/add',  Article.addArticle);
router.post('/article/update',  Article.updateArticle);
router.post('/article/delete',  Article.deleteArticle);
export default router

我之前看到的一个koa+mysql写的也可以参考下,原理类似
koa-blog

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文