javascript - Ramda 返回响应作为请求正文

标签 javascript ramda.js

我是 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/

相关文章:

javascript - 单击第一个元素,更改第二个元素的样式

javascript - 复制对象数组以用作状态 - React.js

javascript - 通过key获取深度嵌套对象的路径

javascript - 是否有 ramda 函数可以帮助您将日志记录添加到管道/组合中?

javascript - 自动将光标置于多功能框/地址栏中

javascript - 每次我调用一个对象时如何运行一个函数

javascript - 从另一个对象插入嵌套属性

javascript - 循环直到...与 Ramda

JavaScript 函数式编程 : How to handle fetch (for pipes)

javascript - Ramda - 从数组中查找匹配的对象