为什么在表单中使用POST方法会返回错误404?

时间:2017-08-04 11:01:24

标签: ruby http sinatra

我是红宝石的新手,所以我使用POST http方法创建了一个表单,但它失败如下:

ruby sinatra_msg.rb  
[2017-08-04 07:47:50] INFO  WEBrick 1.3.1
[2017-08-04 07:47:50] INFO  ruby 2.3.3 (2016-11-21) [x86_64-linux]
== Sinatra (v2.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2017-08-04 07:47:50] INFO  WEBrick::HTTPServer#start: pid=18141 port=4567
127.0.0.1 - - [04/Aug/2017:07:48:00 -0300] "GET / HTTP/1.1" 404 458 0.0083
127.0.0.1 - - [04/Aug/2017:07:48:00 -03] "GET / HTTP/1.1" 404 458
- -> /

我有以下文件树:

.
├── sinatra_msg.rb
└── views
    ├── index.erb
    └── msg.erb

sinatra_msg.rb的内容:     #coding:utf-8     要求'sinatra'

post '/' do
  body = params[:body]
  erb :index
end

post '/show-msg' do
   msg = params[:msg]
   text = params[:text]
  erb :msg
end

index.erb的内容

<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing Sinatra post</h2>

<form action="/show-msg" method="POST">
  subject: <input name="msg[subject]"> <br />
  text: <input name="msg[text]"> <br />
  <input type="submit">
</form>
</body>
</html>

这是msg.erb的内容:

<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing output</h2>
<h1>Hi!</h1>

<p>
<%= params['msg']['text'] %>
</p>

<a href='/'>Home</a>
</body>
</html>

这段代码有什么问题? (使用ruby 2.3.3p222(2016-11-21修订版56859)[x86_64-l])

UPDATE:

我仅在第一部分中将POST替换为GET并且有效:

# coding: utf-8
require 'sinatra'

get '/' do
  body = params[:body]
  erb :index
end

post '/show-msg' do
   msg = params[:msg]
   text = params[:text]
  erb :msg
end

我想知道是否正确,我可以只为'/'获取吗?

1 个答案:

答案 0 :(得分:1)

代码是正确的。

当您在浏览器中访问某个页面时,浏览器默认会发送一个GET http方法,您必须在需要时指定POST。

可以POST到'/',HTTP上没有约束,可以将哪个方法应用于网址。