【问题标题】:Details on executing Ruby code using Sinatra使用 Sinatra 执行 Ruby 代码的详细信息
【发布时间】:2018-03-10 19:23:52
【问题描述】:

我有一个 Ruby 脚本:

require 'uri'
require 'net/http'
require 'openssl'
require 'json'
require 'pp'
require 'opal'
require 'ostruct'


url = URI("MY URI")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'MY AUTH'
request["cache-control"] = 'no-cache'

response = http.request(request)

result = JSON.parse(response.body)

if response.code == "200"

    result.each do |doc|
    #      puts doc
           print doc ["id"]
           print " "
           print doc ["is_completed"]
           print " "
           print doc ["name"]
           print "\n"
    end
else
        puts "error"
end

这工作正常。

我所做的是:

1) 安装 Sinatra

2) 我能够运行一个 ruby​​ 文件并看到 localhost 显示一些东西。

我需要做什么

  • 将上述脚本的结果(我正在解析的一些 api 数据)显示到 localhost html 页面上。

如前所述,我有 Sinatra gem,只是在 localhost 网站上显示了一个简单的“hello world”。我正在寻找的主要内容是如何在网站上显示上述脚本的结果。

提前致谢。

更新:我的代码设置如下,

require 'sinatra' 

get '/' go 
code = "<%= MY ENTIRE CODE I POSTED ABOVE %>" 
erb code 
end

当我访问 localhost 时,我得到了 API 调用的整个响应,它位于“result”变量中。 “打印”语句仍显示在执行脚本的终端上。

所以现在的问题是,我如何将特定数据发送到网页。比如在“打印”语句中。谢谢。希望这很清楚。

【问题讨论】:

  • 您是否尝试过阅读有关呈现 HTML 页面的文档? sinatrarb.com/intro.html
  • "Ruby" 不是首字母缩写词,因此不需要全部大写。
  • @nicooga 感谢您将我指向该站点。看起来我能够做到这一点:code require 'sinatra' get '/' go code = "" erb code end code 我相信这会让我想到另一个问题. API 结果的整体现在显示在 localhost 站点上。这太棒了 !!!至少我做到了。但是在代码中,看跌期权正在终端上显示。如何绕过在网站上显示放置而不是 API 响应的整个结果?希望这是有道理的....
  • edit您的问题反映您到目前为止(使用代码)所做的工作以及您的新问题是什么。

标签: html ruby sinatra erb


【解决方案1】:

我能够找到答案,现在我已经完全按照我的需要工作了。

最终代码:

require 'sinatra'

get '/' do

require 'uri'
require 'net/http'
require 'openssl'
require 'json'
require 'pp'
require 'opal'
require 'ostruct'

url = URI('MY URI FOR DATA')

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request['content-type'] = 'application/json'
request['authorization'] = 'MY AUTH INFO'
request['cache-control'] = 'no-cache'
request['postman-token'] = 'b1dfa857-69f3-dc2e-3c23-ae60632891cb'

response = http.request(request)

jhash = JSON.parse(response.body)
output = ''

jhash.each do |doc|
   title_tag = doc ["id"]
   info_item = doc ["name"]
   output << "<TR><td>#{title_tag}</td><td>#{info_item}</td></tr>"
end

  erb :index, :locals => {results: output}

end

index.erb 文件只包含:

<table>
  <th>The Weather in Buffalo, NY, USA</th>
  <tr>
    <td><%= results %></td>
  </tr>
</table>

结果现在正是我想要的。感谢您的回复。

【讨论】:

  • 最好将require 语句放在文件顶部,它们不属于get 块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 2018-06-14
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多