[英]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.