koa2 的 ctx.state ctx.body 有什么区别啊?
下面有什么区别吗?
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,
})
})
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
state是用来给中间件保存数据的,而body是最终的输出
body
和原来一样没变过,只说说state
。为什么会有
state
,因为我们会有到很多中间件用于存储某些昨天,比如登陆或者权限验证,在此之前,我们会报错到ctx
的一个自定义属性上比如ctx.locals.isLogin
,但是我们总是要写类似这样的代码现在官方提供了
ctx.state
用于报错中间件的状态数据。在koa服务器端渲染页面,可以用
ctx.state
传递值比如:
这样在.ejs页面就可以取到值
也可以在其他渲染模版里取到值,取值的方式不同而已