ruby 变量不等于应该用拼音表示的变量

wnavrhmk  于 2023-01-30  发布在  Ruby
关注(0)|答案(1)|浏览(134)

我正在制作我的第一个Web服务器,但是当我使用if语句将用户从html文件输入的内容与字符串进行比较时,即使它是真的,它们也会跳过它。

require 'socket'
require 'pry'

class Parser

  def parse(req, clients)

    save = File.new("requests.txt", "w+")
    save.write(req.chomp)
    save.close
    words = IO.readlines("requests.txt").last(1)
    if words == "Username=test&Password=1234"
      success(clients)
    end
    #binding.pry

    puts words

  end
end

def success(succ_client)

  success_file = File.read("templates/success.html")
  stuff = "HTTP/1.1 200\r\n" + success_file.force_encoding('UTF-8')
  succ_client.puts(stuff)

end

def response(cli)

  file = File.read("templates/passpage.html")
  content = "HTTP/1.1 200\r\n" + file.force_encoding('UTF-8')
  cli.puts(content)

end

serv_sock = TCPServer.new('10.0.2.15', 8080)

loop {
  client = serv_sock.accept()
  requests = Parser.new
  requests.parse(client.readpartial(2043), client)
  response(client)

  client.close
  puts "Connected"
}

我试着用#compact!,nil?,用pry来解码来找出问题所在,但是我就是找不到问题所在,当我把单词变量放进去的时候,它会放进正确的值,但是我猜它不是正确的值。我试着解码单词,但是仍然不起作用,除非我做错了。这个问题已经解决了5天了,这是我的第一个ruby程序,和网络服务器,所以我很感激任何帮助,我可以得到与此前进的生活。

92dk7w1h

92dk7w1h1#

您的代码存在几个问题。
IO.readlines("requests.txt").last(1)的调用主要返回零个或一个字符串的Array。但是,您将它与单个字符串进行比较。由于字符串不等于数组,因此比较失败。
很可能,你想使用IO.readlines("requests.txt").last来代替,如果readlines方法返回的数组是空的,则返回最后一个元素或数组或nil
请查看Array#last方法的文档,以了解有关此方法返回类型的更多信息。
除此之外,即使您的if语句最终匹配,您对success方法fill的预期调用也会失败,因为您已经在全局main对象而不是Parser类中定义了它。
此外,当您最终从parse方法调用success时,将返回两个响应,因为您稍后也调用response方法。您可能需要重新考虑选择正确响应的方式...

相关问题