在我的第一次使用Node的经验中,我已经在Openshift上托管了一个Nodejs服务器,希望不久将其用于Android应用程序服务器。目前,我正在尝试获取一个简单的express应用程序,它将响应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也无法解决问题。尽管如此,我认为这是一个端口问题,因为当我尝试发送请求时,我的发布脚本和浏览器都挂起,而不是抛出连接错误。当然,我是个完全的新手,很可能忽视了一个简单但关键的元素。提前致谢。