[英]Nodejs Express Server Doesn't Respond to HTTP POST: OpenShift
对于我使用Node的第一次体验,我在Openshift上托管了一个Nodejs服务器,我希望很快就能用于Android应用服务器。 目前,我正在尝试获得一个简单的快速应用程序,它将响应HTTP POST请求。 这是此服务器的代码; 我已经尽可能地简单了,它对GET请求的响应很好,但POST回调似乎永远不会执行:
#!/bin/env node
var http = require('http');
var bodyParser = require('body-parser');
var express = require('express');
var app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/', function (req, res) {
res.end("Post successful.");
});
app.get('/', function (req, res) {
res.end("App listening on port: " + process.env.OPENSHIFT_NODEJS_PORT);
});
http.createServer(app).listen(process.env.OPENSHIFT_NODEJS_PORT,
process.env.OPENSHIFT_NODEJS_IP, function() {
console.log("Server started on %s.", Date(Date.now()));
});
这是我用来测试响应的Node脚本。 我不相信这是问题,因为我也尝试使用Java进行POST并使用HTML表单,但这些似乎都不起作用:
var http = require('http');
var data = JSON.stringify({
'message' : 'hello'
});
var options = {
host: 'xx-xx.rhcloud.com',
port: '8080',
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': data.length
}
};
var request = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
res.on('end', function(err) {
console.log("Post successful");
});
});
request.write(data);
request.end();
我可以在本地运行服务器时执行回调,但前提是我在此时硬编码端口和IP。 一旦我启动服务器,它就会使用端口响应GET请求,我认为该端口始终为8080,但即使是主机端口的8080硬编码也无法解决问题。 尽管如此,我认为这是端口的一个问题,因为当我尝试发送请求时,我的发布脚本和浏览器都挂起,而不是抛出连接错误。 当然,我是一个完整的菜鸟,我可以很容易地忽略一个简单但关键的元素。 提前致谢。
这可能说明我对网络技术缺乏经验,但我发现了这个问题; 尝试POST到特定端口时,服务器没有响应。 但是,如果我从POSTing脚本中完全删除了端口声明,那么它可以正常工作。 有人可能会解释为什么会这样吗?
我的答案可能会迟到,但在这里解决了同样的问题,也许这会对其他人有所帮助。
假设您的应用具有以下公共网址:
http://xyz-dercetech.rhcloud.com/api/authenticate
它没有反应。
- > rhcloud.com有自己的内部路由,所以process.env.OPENSHIFT_NODEJS_ *不会帮助他们自己的服务器。 您的NodeJS应用程序绑定到内部IP和端口,但该IP不是公共的。
使用上面的公共URI,您将享受无缝传递的GET请求。 但正如你所说,POSTing会失败。
只需在URI中添加https端口:
http://xyz-dercetech.rhcloud.com:443/api/authenticate
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.