रेल 4 एक अपवाद ActionDispatch :: ParamsParser :: ParseError अपवाद कहते हैं लेकिन जब से मिडलवेयर ढेर में अपनी यह प्रतीत होता है यह सामान्य में बचाया नहीं किया जा सकता नियंत्रक पर्यावरण। एक जेसन एपीआई एप्लिकेशन में मैं एक मानक त्रुटि प्रारूप के साथ जवाब देना चाहता हूँ।कैसे रेल में ActionDispatch :: ParamsParser :: ParseError से बचाव करने के लिए 4
यह gist मध्यस्थता को रोकने और प्रतिक्रिया देने के लिए एक रणनीति दिखाता है। इस पद्धति के बाद मेरे पास है:
application.rb:
module Traphos
class Application < Rails::Application
....
config.middleware.insert_before ActionDispatch::ParamsParser, "JSONParseError"
end
end
और मिडलवेयर है:
class JSONParseError
def initialize(app)
@app = app
end
def call(env)
begin
@app.call(env)
rescue ActionDispatch::ParamsParser::ParseError => e
[422, {}, ['Parse Error']]
end
end
end
मैं मिडलवेयर मैं (कल्पना) के बिना अपने परीक्षण चलाते हैं :
Failures:
1) Photo update attributes with non-parseable json
Failure/Error: patch update_url, {:description => description}, "CONTENT_TYPE" => content_type, "HTTP_ACCEPT" => accepts, "HTTP_AUTHORIZATION" => @auth
ActionDispatch::ParamsParser::ParseError:
399: unexpected token at 'description=Test+New+Description]'
जो वही है जो मैं उम्मीद करता हूं (पारस्परिक रूप से मैं बचाव नहीं कर सकता)।
अब केवल परिवर्तन के साथ ऊपर मिडलवेयर में जोड़ने के लिए:
2) Photo update attributes with non-parseable json
Failure/Error: response.status.should eql(422)
expected: 422
got: 200
और लॉग मानक नियंत्रक कार्रवाई निष्पादित किया जा रहा है और एक सामान्य प्रतिक्रिया लौटने (हालांकि बाद से यह कोई पैरामीटर प्राप्त नहीं किया था पता चलता यह कुछ भी अद्यतन नहीं किया था)।
मेरे सवालों का:
कैसे ParseError से बचाव और एक कस्टम प्रतिक्रिया लौट सकते हैं। ऐसा लगता है कि मैं सही रास्ते पर हूं लेकिन वहां काफी नहीं है।
मैं काम नहीं कर सकता, जब अपवाद उठाया जाता है और बचाया जाता है, तो नियंत्रक कार्रवाई अभी भी बढ़ जाती है।
मदद की बहुत सराहना, --Kip
क्या कोई अन्य मिडलवेयर है जो रिटर्न स्थिति बदलता है? क्या आपने प्रिये या कुछ के साथ कुछ डिबगिंग किया था? – phoet