【发布时间】:2015-08-17 11:24:43
【问题描述】:
对于我使用 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 发布并使用 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 也无法解决问题。不过,我假设这是端口的问题,因为当我尝试发送请求时,我的发布脚本和浏览器都挂了,而不是引发连接错误。诚然,我是一个完全的菜鸟,我很容易忽略一个简单但关键的元素。提前致谢。
【问题讨论】:
-
我已经测试了你的代码,如果你把 localhost 和一些端口放在它工作正常,所以我猜你在配置时遇到了问题?
-
对我来说使用 localhost 也能正常工作。当我尝试 POST 到托管在 OpenShift 上的服务器时,会出现问题。