繁体   English   中英

无法将Phusion Passenger与Sails.js / Node.js一起使用POST表单

[英]Cannot POST forms using Phusion Passenger with Sails.js/Node.js

我有一个用Sails.js编写的网站,我正尝试将其部署到服务器上装有Passenger的服务器,到目前为止,我还没有运气。 尽管所有GET请求均有效,但似乎所有POST请求均未真正到达应用程序。 没有乘客,一切都能完美运行。

测试控制器

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')

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

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

相反,这可能是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版本是否适合您。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM