Nodejs Express Server没有响应HTTP POST:OpenShift

时间:2015-08-17 11:24:44

标签: node.js express 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硬编码也无法解决问题。尽管如此,我还是假设它是端口的问题,因为当我尝试发送请求时,我的发布脚本和浏览器都挂起,而不是抛出连接错误。当然,我是一个完整的菜鸟,我可以很容易地忽略一个简单但关键的元素。提前致谢。

2 个答案:

答案 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