繁体   English   中英

Nodejs Express Server不响应HTTP POST:OpenShift

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

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