从NodeJS到Node / Express的安全POST请求挂起

我正在使用以下内容将POST数据发送到安全的nodejs服务器:

文件:main.js

var strdata = JSON.stringify({"data":"thisdata"}); var options = { host: '192.168.1.63', port: 3001, path: '/saveconfig', method: 'POST', rejectUnauthorized: false, requestCert: true, agent: false, headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(strdata) } }; var req = https.request(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); res.setEncoding('utf8'); res.on('data', function (chunk) { console.log('BODY: ' + chunk); }); }); console.log(req.write(strdata)); console.log(req.end()); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); req.on('finish', function() { console.log("finished request"); }); 

在其他function性的expressjs服务器,这些是适当的片段:

文件:app.js

 app.post('/saveconfig', function() { data.saveconfig; console.log("received request"); } ); app.get('/getconfig', data.getconfig); 

文件:data.js

 exports.saveconfig = function(req, res) { console.log("saveing config"); res.send(200); res.end(); }; exports.getconfig = function(req, res) { res.send("get OK"); } 

在服务器(Ubuntu)上运行app.js,我从客户端(Windows 7)运行main.js。 req.write和req.end执行和“完成的请求”日志到控制台,但请求callback从不触发。

在app.js中的服务器上,app.post事件触发并将“接收到的请求”logging到控制台。 但“保存configuration”从不logging到控制台。 只有在杀死(^ C)main.js后,才表示日志到控制台“POST / saveconfig”。

我知道我错过了一些简单的东西,但是我已经阅读了几十个编码示例,并且可以从我的代码片段中收集,我尝试了所有我能find或想到的东西。 我猜这个请求没有完成,但我不知道为什么。 什么是缺less“exports.saveconfig”触发?

附加信息

下面的答案解决了我的问题。 因为我是新来的stackoverflow,我不能张贴我自己的答案,但这里是故事的其余部分…

我感谢您的帮助。 对JavaScript仍然陌生,我发现我可以通过将其转换为string来学习很多关于对象的知识。 我最初试图将req参数转换为使用自定义函数的string。 我刚刚发现它使用JSON.stringify代替后显然正在进入无限循环。

代码看起来像这样:

 exports.saveconfig = function (db) { return function(req, res) { console.log("saving config"); console.log(mymodule.serialize(req)); res.end("OK"); console.log(req.body); }; }; 

我以为上面的代码应该logging下来到控制台 – 即使serialize方法是在一个无限循环:

POST / saveconfig

保存configuration

[没有因为无尽的循环]

相反,我得到了:

保存configuration

连接属性已被弃用。 使用getConnections()方法

作为JavaScript的新手,我认为请求,服务器或中间有一些pipe道有问题。 当然,那么我添加的debugging代码(以及我对JS的无知)使问题复杂化了。

更改

 app.post('/saveconfig', function() { data.saveconfig; console.log("received request"); } ); 

 app.post('/saveconfig', datarts.saveconfig); 

并消除无尽的循环固定的问题。

问题在于你是app.js. 您可以在callback中使用data.saveConfig而不用调用它。 正确的方法是

 app.post('/saveconfig', function(req,res) { data.saveconfig(req, res); console.log("received request"); }); app.get('/getconfig', data.getconfig); 

或者(我认为console.log仅用于debugging目的):

 app.post('/saveconfig', data.saveconfig); app.get('/getconfig', data.getconfig); 

如果你想要使用第二个例子,你可以在你的data.saveconfig方法中使用console.log()