首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >body API在第一组API路由之后移除body-param。

body API在第一组API路由之后移除body-param。
EN

Stack Overflow用户
提问于 2016-10-26 09:18:13
回答 1查看 254关注 0票数 1

我目前正在使用鲁米努斯模板和+swagger选项,它添加了compojure支持。

我目前的设置是这样的(只有相关的位):

代码语言:javascript
复制
(ns my-project.routes.services
  (:require [compojure.api.sweet :refer :all]
            ,,,)

(defapi service-routes
  (POST "/login" req
    :return Result
    :body [user UserLogin]
    :summary "Log the user in"
    (auth/login! req user))

(defapi restricted-service-routes
  (POST "/login2" req
    :return Result
    :body [user UserLogin]
    :summary "Log the user in"
    (auth/login! req user)))

代码语言:javascript
复制
 (ns my-project.handler)
   (:require [my-project.routes.services :refer :all])

 (defroutes app-routes
     #'service-routes
     #'restricted-service-routes)

当服务器接收到请求时,它将被传递给app-routes。然后,我使用Swagger测试这些路由,"/login"路由运行良好。但是,完全相似的"/login2"返回

代码语言:javascript
复制
{
  "errors": "(not (map? nil))"
}

当我切换两个服务组的顺序时,结果与预期的一样:第一条路由运行良好,而第二条路由将不接收body

这是Compojure-api本身的一个bug吗?我能做些什么来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-12 20:33:07

defapi宏似乎包装了到api-middleware (签出编写-api源代码)的所有路由,其中包括wrap-params中间件。在您的设置中,您将两组路由链接在一起,它们都包装在api-middleware中,因此,在第二个defapi路由(/login2)发生两次的情况下,将对请求调用wrap-params中间件。wrap-params的第一个调用正确地解析了params,但是第二个wrap-params调用没有什么可处理的,因此您的代码以运行时错误告终。

要解决您的问题,尝试禁用默认包装由api-middleware对您的所有defapi使用,但只有一个。请参阅上面链接中的:disable-api-middleware选项。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40258311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档