【发布时间】:2014-04-30 23:42:00
【问题描述】:
我正在使用以下内容将 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");
});
在其他功能正常的 expressjs 服务器中,这些是适当的 sn-ps:
文件: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 执行和“完成请求”记录到控制台,但请求回调永远不会触发。
在 app.js 中的服务器上,app.post 事件触发并将“收到的请求”记录到控制台。但是“保存配置”永远不会登录到控制台。只有在我杀死 (^C) main.js 之后,express 然后登录到控制台“POST /saveconfig”。
我知道我遗漏了一些简单的东西,但我已经阅读了几十个编码示例,你可能会从我的 sn-p 中收集到,我已经尝试了我能找到或想到的一切。我猜这个请求没有完成,但我不知道为什么。触发“exports.saveconfig”缺少什么?
附加信息
下面发布的答案解决了我的问题。因为我是 stackoverflow 的新手,所以我无法发布自己的答案,但这是故事的其余部分......
感谢您的帮助。作为 JavaScript 的新手,我发现我可以通过将对象转换为字符串来了解很多关于对象的知识。我最初试图将 req 参数转换为字符串使用自定义函数。我刚刚发现它显然在使用 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);
};
};
我原以为上面的代码应该将以下内容记录到控制台——即使序列化方法处于无限循环中:
POST /saveconfig
保存配置
[没有死循环]
相反,我得到了:
保存配置
connections 属性已弃用。使用 getConnections() 方法
作为 JavaScript 新手,我认为请求、服务器或中间的某些管道有问题。当然,然后我添加的调试代码(以及我对 JS 的无知)使问题更加复杂。
变化
app.post('/saveconfig', function() {
data.saveconfig; console.log("received request"); } );
到
app.post('/saveconfig', datarts.saveconfig);
并删除无限循环解决了问题。
【问题讨论】:
标签: javascript node.js express https