鍍金池/ 問答/數(shù)據(jù)庫  HTML/ koa2 的 ctx.state ctx.body 有什么區(qū)別???

koa2 的 ctx.state ctx.body 有什么區(qū)別啊?

下面有什么區(qū)別嗎?

controllers

async function get (ctx, next) {
    const res = await models.test.get()
    
    ctx.state.data = res.data
    /******* 或者 ********/
    ctx.body = res.data
    
    await next()
}
module.exports = {
    get
}

routes

router.get('/', controllers.test.get, async (ctx, next) => {
    await ctx.render('test', {
        list: ctx.state.data.obj,
        /******* 或者 ********/
        list: ctx.body.obj,
    })
})
回答
編輯回答
夏木
The recommended namespace for passing information through middleware and to your frontend views.

body和原來一樣沒變過,只說說state
為什么會有state,因為我們會有到很多中間件用于存儲某些昨天,比如登陸或者權限驗證,在此之前,我們會報錯到ctx的一個自定義屬性上比如ctx.locals.isLogin,但是我們總是要寫類似這樣的代碼

app.use(async ctx => {
    ctx.locals = ctx.locals || {};
});

現(xiàn)在官方提供了ctx.state用于報錯中間件的狀態(tài)數(shù)據(jù)。

2017年12月14日 15:37
編輯回答
舊城人

state是用來給中間件保存數(shù)據(jù)的,而body是最終的輸出

2018年4月7日 08:34