我是 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>
更新如果你想以pointfree风格实现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>
关于javascript - Ramda 返回响应作为请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788521/