gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:23 25 4
gpt4 key购买 nike

我使用以下命令将 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服务器中,这些是适当的片段:

文件: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");
}

当 app.js 在服务器 (Ubuntu) 上运行时,我从客户端 (Windows 7) 运行 main.js。 req.write 和 req.end 执行并将“完成的请求”记录到控制台,但请求回调永远不会触发。

在 app.js 中的服务器上,app.post 事件触发并将“收到的请求”记录到控制台。但“保存配置”永远不会记录到控制台。只有在我杀死 (^C) main.js 后,express 才会登录到控制台“POST/saveconfig”。

我知道我错过了一些简单的东西,但我已经阅读了数十个编码示例,您可能可以从我的代码片段中收集到,我已经尝试了我能找到或想到的一切。我猜请求尚未完成,但我不知道为什么。缺少什么才能触发“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

saving config

[nothing because of the endless loop]

相反,我得到了:

saving config

connections property is deprecated. Use getConnections() method

作为 JavaScript 新手,我认为请求、服务器或中间的某些管道出了问题。当然,然后我添加的调试代码(以及我对 JS 的无知)使问题变得更加复杂。

改变

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

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

并删除无限循环解决了问题。

最佳答案

问题出在你的app.js上。您可以在回调中使用 data.saveConfig 而无需调用它。正确的方法是

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

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

或者(我假设console.log仅用于调试目的):

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

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

如果您想使用第二个示例,您可以在 data.saveconfig 方法中执行 console.log() 操作。

关于javascript - 从 NodeJS 到 Node/Express 的安全 POST 请求挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com