3

Sinatra で次のような単純なエンドポイントを作成した場合:

post '/users' do 
    'posted'
end

curl -v -X GET http://localhost:8080/users405 を期待するときに 404 を返します。

ドキュメントを調べましたが、何も見つかりませんでした。ソースコードを掘り下げる前に、Sinatra で 405 を処理して返す方法を知っている人はいますか? not found メソッドのようなもの:

not_found do
    'Not found - ' + request.path
end
4

2 に答える 2

3

sinatra が get route /users を見つけられないため、404 が返されました。カスタム エラーを返したい場合は、Haltを参照してください。

エラーをスローする

次のように get /users で 405 を返すことができます。

get "/users" do
    halt 405
end

一度に複数の http 動詞をキャッチするには、マルチルートを使用できます

require 'sinatra'
require "sinatra/multi_route"
route :get, :post, '/foo' do
  # "GET" or "POST"
  p request.env["REQUEST_METHOD"]
end

# Or for module-style applications
class MyApp < Sinatra::Base
  register Sinatra::MultiRoute
  route :get, :post, '/foo' do
    # ...
  end
end

ソース

エラー処理

sinatra でエラー コードを処理する場合は、404 エラーを簡単に処理できます。

not_found do
  'This is nowhere to be found.'
end

あなたの場合、405 エラーを処理します。

error 405 do
  'Access forbidden'
end
于 2013-05-07T05:32:48.590 に答える