我有一个由Doorkeeper保护的Grape API,并且有很多方法都可以正常工作。但是,有一种方法表现异常。这是一个不需要参数的GET请求,运行它会引发以下错误:
/v1/discount_cards/all.json中的Grape :: Exceptions :: ValidationErrors
ID无效
我的方法如下所示:
desc 'Get all the cards of current customer'
params {}
get 'all' do
current_customer.discount_cards.to_json(include:
{
barcode: {
include: :barcode_type
}
})
end
日志显示错误发生在logger.rb
文件的第17行,如下所示:
module API
class Logger
def initialize(app)
@app = app
end
def call(env)
payload = {
remote_addr: env['REMOTE_ADDR'],
request_method: env['REQUEST_METHOD'],
request_path: env['PATH_INFO'],
request_query: env['QUERY_STRING'],
x_organization: env['HTTP_X_ORGANIZATION']
}
ActiveSupport::Notifications.instrument 'grape.request', payload do
@app.call(env).tap do |response| # <-- logs say the error is here
payload[:params] = env['api.endpoint'].params.to_hash
payload[:params].delete('route_info')
payload[:params].delete('format')
payload[:response_status] = response[0]
end
end
end
end
end
我的主base.rb
班看起来像这样:
module API
class Dispatch < Grape::API
mount API::V1::Base
end
Base = Rack::Builder.new do
use API::Logger
run API::Dispatch
end
end
我真的不明白id
它在说什么,而且,所有其他api方法都可以正常工作(发布,获取,放置,删除)。
您能帮我解决这个问题吗?
我最近也遇到了这个问题,事实证明这对我来说是一个代码顺序问题。我在这里找到了答案。
Grape按顺序评估路由,因此使用两条路由/:id和/ nearby_missions,它首先匹配/:id,使id = nearby_missions。然后,它尝试强制将near_missions转换为Integer,该整数将失败,并且您会收到缺少的ID错误。
您可以通过添加要求:/ \ d * /来“解决”这一问题(不进行测试),但是最好按您希望它们被评估的顺序订购它们,这就是您要做的。做过。
对于我来说,您的问题中没有足够的信息,以确保这也是您的问题,但是很可能是这样!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句