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

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');
})
阅读 4.7k
1 个回答

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
    });
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进