如何将ctx.state传递给另一个路由中的模板?

发布于 2022-09-06 05:40:10 字数 1461 浏览 17 评论 0

admin.get('/usermsg', async(ctx) => {    
    var count = await new Promise(function(resolve, reject){
        User.count(function(err, count){
            if(count){
                resolve(count);
            }

            if(err){
                reject(err);
            }
        });
    })

    ctx.state.userMsg = {
        page: Number(ctx.query.page),        //翻到的页数
        limit: 4,                            //每页显示的用户数
        pages: 0,                            //总页数
        count: count                         //用户信息数量
    }

    var userMsg = ctx.state.userMsg;

    ctx.state.users = await new Promise(function(resolve, reject){
        userMsg.pages = Math.ceil(userMsg.count / userMsg.limit);
        userMsg.page = userMsg.page > userMsg.pages ? userMsg.pages : userMsg.page;         //page不能大于pages,不能小于1
        userMsg.page = userMsg.page < 1 ? 1 : userMsg.page;

        var skip = (userMsg.page - 1) * userMsg.limit;                  //每页从第几个用户信息开始读取

        User.find().limit(userMsg.limit).skip(skip).exec(function(err, doc){
            if(doc){
                resolve(doc);
            }

            if(err){
                reject(err);
            }
        })
    })

    await ctx.render('admin/usermsg');
})

在上面这个路由中可以将ctx.state.userMsg传递给模板,在下面这个路由中也需要这个数据,请问应该怎么传递给他?

admin.get('/category', async(ctx) => {
    await ctx.render('admin/category');
})

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

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

发布评论

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

评论(1

别挽留 2022-09-13 05:40:10

await next()和链式操作

比如:

// controllers/test.js
async function get (ctx, next) {
    const res = await models.test.get()
    
    ctx.state.code = 0
    ctx.state.data = res.data
    
    await next()
}
module.exports = get
import controllers from '../controllers/test'

admin.get('/category', controllers.test, async(ctx) => {
    await ctx.render('admin/category', {
        list: ctx.state.data
    });
})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文