【问题标题】:Cannot POST forms using Phusion Passenger with Sails.js/Node.js无法使用带有 Sails.js/Node.js 的 Phusion Passenger 发布表单
【发布时间】:2014-05-30 15:18:20
【问题描述】:

我有一个用 Sails.js 编写的网站,我正试图将它部署到一个带有 Passenger 的服务器上,但到目前为止我没有任何运气。虽然所有 GET 请求都有效,但似乎没有一个 POST 请求真正到达应用程序。没有Passenger,一切都可以完美运行。

测试控制器

module.exports = TestController =

  show: (req, res) ->
    res.view()

  post: (req, res) ->
    res.send(200)

表格

form(action='/test', method='POST')
    input(type='text', name='test', placeholder='foo')
    input(type='submit', value='Test')

在不发送参数时,我收到 Postman 的 200: OK 响应,但一旦添加参数,我什么也得不到。它要么只是挂起,要么向我发送Bad request: GET and HEAD requests may not have bodies 错误。

【问题讨论】:

    标签: node.js express passenger sails.js


    【解决方案1】:

    Phusion 乘客作者在这里。正如@Edy 声称的那样,这与标准输入和/dev/null 无关。标准输入仅适用于应用程序本身,不适用于 Phusion 乘客进程(这是一个具有不同标准输入的不同进程)。

    相反,这可能是 Phusion Passenger 中特定于 Node.js 的错误。在下一个版本 4.0.55(发布目标日期:下周星期五)中,我们将引入非常重要的 Node.js 兼容性改进,这可能会解决您的问题。到目前为止,Phusion Passenger 通过模拟其 HTTP 库来支持 Node.js。在 4.0.55 中,我们放弃了这种方法,转而采用一种新的、更简单的方法,该方法不涉及模拟或修补任何内容。

    如果您想知道 4.0.55 是否解决了您的问题,您可以从 git 获取 Phusion Passenger 并检查 git master 版本是否适合您。

    【讨论】:

    • 我可以确认来自 git 的乘客现在为我工作。谢谢@hongli
    • 我也可以。谢谢@Hongli!
    【解决方案2】:

    如果您单独使用 Phusion Passenger 并使用系统服务(如 systemd)启动它,您将无法执行 POST 请求。

    问题是 Phusion Passenger 使用 STDIN 进行内部通信,但您的系统服务将其 STDIN 设置为 /dev/null

    要重现此行为,请尝试像这样开始:$ passenger start >/dev/null 2>/dev/null </dev/null

    您可以尝试将乘客用作 nginx/apache 模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 2012-03-12
      • 2023-03-20
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      相关资源
      最近更新 更多