我有一个从传感器收集数据的网络应用程序。传感器通过POST请求将数据发送到我的webapp example.com
。
出于调试目的,我需要在传感器和webapp之间创建一个额外的层。
我创建了一个额外的小网络应用程序,所有这一切都是将传入的POST请求转发到example.com
并将其转发到webapp,现在响应不同的网址,比如example2.com
。
所以,在它之前:
sensors -> example.com (webapp)
现在是:
sensors -> example.com -> example2.com (webapp)
通过这种方式,我可以看到webapp对传感器的响应并记录下来。
为了完成这项工作,我使用了request module。当我在我的本地机器上测试它时,一切正常(我的额外层监听localhost:3000
并且webapp监听localhost:3001
),但是一旦我指向外部URL就得到了答案我返回是 404 Not Found
,即使我直接发布到example2.com
,一切都按预期工作。
这是我的模块:
var express = require('express');
var app = express();
var request = require('request');
var bodyParser = require('body-parser');
var cuid = require('cuid');
var url = require('url');
app.use(bodyParser.text({ type: '*/*' }));
app.post('/', function (req, res) {
// immediately send 200 OK to the client
res.send('ok');
// add a unique ID
if (!req.headers['x-request-cuid']) {
req.headers['x-request-cuid'] = cuid();
}
var log_string = req.headers['x-request-cuid'] + "," + new Date().toISOString();
// filter empty requests
var reqbody = req.body;
if(typeof reqbody !== 'string'){
return res.send('empty body');
}
// Configure the request
var options = {
method: 'POST',
url: 'http://example.com', // <- if I put localhost:3001 (the port I put my webapp to listen on) here, it works
headers: req.headers,
body: reqbody
};
// Start the request
request(options, function (error, response, body) {
log_string += "," + new Date().toISOString() + "," + response.statusCode + "," + response.statusMessage + "," + response.body;
console.log(log_string);
});
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
如果有帮助,我正在使用Google App Engine,因此所有内容都会部署到Google App Engine。
编辑:澄清“不起作用”
答案 0 :(得分:1)
根据this documentation,您的应用必须收听端口 8080 。
App Engine前端会将传入的请求路由到端口8080上的相应模块。您必须确保您的应用程序代码正在侦听8080.