[英]Ramda return response as request body
我是Ramda的新手,我想知道如何完成一个简单的任务:
我有一个动作,我只想返回请求正文
router.post('/', ctx => {
ctx.body = ctx.request.body
})
我尝试过镜头,但没有成功
const bodyLens = R.lensPath(['ctx', 'body'])
const reqLens = R.lensPath(['ctx','request', 'body'])
const set = R.pipe(R.view(reqLens), R.set(bodyLens))
router.post('/', ctx => {
set(ctx)(ctx)
ctx.body = ctx.request.body
})
如何使其以优雅的方式工作?
这是您要达到的目标吗?
const ctx = { request: { body: 'hello' } } const bodyLens = R.lensPath(['body']) const reqLens = R.lensPath(['request', 'body']) const _set = R.pipe(R.view(reqLens), R.set(bodyLens)) console.log(_set(ctx)(ctx))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
更新如果要以无点样式实现ctx => _set(ctx)(ctx)
,如何简化函数并导入converge
?
const ctx = { request: { body: 'hi' } } const _set2 = R.converge(R.assoc('body'), [R.path(['request', 'body']), R.identity]) console.log(_set2(ctx));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
如果您想以不变的方式读/写道具,那么镜片实际上是可以的。 为了使函数无指向并避免多次传递ctx
,可以使用R.chain
代替pipe
const ctx = { request: { body: 'test' } } const setBody = R.chain( R.set(R.lensPath(['body'])), R.view(R.lensPath(['request', 'body'])) ) console.log(ctx, setBody(ctx))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.24.1/ramda.min.js"></script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.