lib/doraemon/proxy_server.rb in doraemon-1.0.6 vs lib/doraemon/proxy_server.rb in doraemon-1.0.7
- old
+ new
@@ -9,11 +9,11 @@
def initialize(port=8000, root)
@port = port
@root = root
end
- def start(api_list)
+ def start()
Cert.generate_cert
_session = Ritm::Session.new
@@ -26,34 +26,82 @@
proxy[:bind_port] = _port
end
_session.on_response do |_req, _resp|
- if api_list.include?(_req.path)
+ puts "-----------------------------------------------------------------"
+ puts " - URI: #{_req.request_uri}"
- puts "- - - > #{_req.path}"
+ name = _req.path
+ if name.start_with?('/')
+ name = name[1, name.size - 1]
+ end
+ name = name.gsub('_', '__').gsub('/', '_')
- _params = begin JSON.parse(_req.body) rescue _req.body end
- _result = begin JSON.parse(_resp.body) rescue {} end
+ _api_path = nil
+ for ext in [".rb", ".json", ".api"] do
+ path = File.join(@root, "#{name}#{ext}")
+ if File.exist?(path)
+ _api_path = path
+ break
+ end
+ end
+ _params = begin JSON.parse(_req.body) rescue _req.body end
+ _result = begin JSON.parse(_resp.body) rescue {} end
+
+ if _api_path
+
begin
- _api_path = File.join(@root, api_list[_req.path])
_result = eval(File.read(_api_path)) if File.exist?(_api_path)
rescue
_result = {
"code": -1,
"msg": "#{_req.path} 处理错误"
}
end
-
+
_resp.status = 200
_resp.body = _result.to_json
_resp.header['content-length'] = _resp.body.bytesize
- _resp.header['content-type'] = 'application/json;charset=UTF-8'
-
- puts "#{JSON.pretty_generate(_result)}\n\n"
+ _resp.header['content-type'] = 'application/json; charset=utf-8'
+
end
+ print_req_body = false
+ print_resp_body = false
+ req_content_type = _req.header['content-type']
+ ["text", "json"].each do | t |
+ if req_content_type.class == Array
+ req_content_type.each do | tt |
+ if tt.downcase.index(t) != nil
+ print_req_body = true
+ end
+ end
+ end
+ if _resp.header['content-type'].downcase.index(t) != nil
+ print_resp_body = true
+ end
+ end
+
+ if print_req_body
+ puts " - Request: #{_req.body}\n"
+ else
+ if _req.body.class != NilClass
+ puts " - Response: <#{_req.body.length}>"
+ end
+ end
+
+ if print_resp_body
+ puts " - Response: #{_resp.body}\n" if print_resp_body
+ else
+ if _resp.body.class != NilClass
+ puts " - Response: <#{_resp.header['content-type']}>, size #{_resp.body.length}"
+ end
+ end
+
+ puts "\n"
+
end
_session.start
# trap 'INT' do
\ No newline at end of file