【发布时间】:2018-01-28 08:46:24
【问题描述】:
我目前有 Ruby 代码,它从客户端获取一个 http 帖子。它发布了另一个 http 帖子,我想根据帖子的响应发送一个 json 响应。我该怎么做呢?我正在尝试使用这篇文章的答案:How to send simple json response in Rails?
但是当我尝试编译时它给了我错误。
require 'sinatra'
require 'rest-client'
require 'sequel'
require 'pg'
require 'json/ext'
require 'net/http'
require 'json'
require 'monza'
require 'time'
post '/receiptValidation' do
# Find devices with the corresponding reg_tokens
base64ReceiptDataString = params[:base64ReceiptDataString]
uri = URI("https://sandbox.itunes.apple.com")
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme ==
'https') do |http|
response = http.post('/verifyReceipt', params_json)
parsedJson = JSON.parse(response.body)
# ***** send JSON response here *******
respond_to do |format|
# ... other formats here ...
format.jsonr do
render :json => {
:status => :ok,
:message => "Success!",
:html => "...insert html..."
}.to_json
end
end
end
end
这是我得到的错误:
2017-08-20 02:36:04 - NoMethodError - undefined method `respond_to' for #<Sinatra::Application:0x007f0dcb04ba70>
2017-08-20T02:36:04.949145+00:00 app[web.1]: Did you mean? respond_to?:
2017-08-20T02:36:04.949146+00:00 app[web.1]: firebasepushserver.rb:315:in `block in <main>'
我想在下面的 swift 代码中得到响应:
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else {
// check for fundamental networking error
print("error=\(error)")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
// check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(response)")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(responseString)")
print("done")
}
task.resume()
【问题讨论】:
-
错误信息是什么?
-
2017-08-20 02:36:04 - NoMethodError -
' 中的未定义方法respond_to' for #<Sinatra::Application:0x007f0dcb04ba70> 2017-08-20T02:36:04.949145+00:00 app[web.1]: Did you mean? respond_to?: 2017-08-20T02:36:04.949146+00:00 app[web.1]: firebasepushserver.rb:315:inblock -
您的应用似乎是 Sinatra 应用而不是 Rails。考虑编辑标签并删除问题中的 ruby-on-rails 标签。
-
是的,它是一个 sinatra 应用程序。我不知道这与rails不同。所以我需要找到如何使用 sinatra?
-
它们是不同的 Web 框架,尽管它们都是用 Ruby 编写的。