对于我第一次使用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硬编码也无法解决问题。尽管如此,我还是假设它是端口的问题,因为当我尝试发送请求时,我的发布脚本和浏览器都挂起,而不是抛出连接错误。当然,我是一个完整的菜鸟,我可以很容易地忽略一个简单但关键的元素。提前致谢。
答案 0 :(得分:1)
这可能说明我对网络技术缺乏经验,但我发现了这个问题;尝试POST到特定端口时,服务器没有响应。但是,如果我从POSTing脚本中完全删除了端口声明,那么它可以正常工作。有人可能会解释为什么会这样吗?
答案 1 :(得分:0)
我的答案可能会迟到,但在这里解决了同样的问题,也许这会对其他人有所帮助。
假设您的应用具有以下公共网址:
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