我有一个 .net c# 客户端软件发送这样的数据:
using(WebClient client = new WebClient())
{
string serialisedData = "";
serialisedData = JsonConvert.SerializeObject(myData);
client.Credentials = new NetworkCredential(config.UserData.Username, config.UserData.Password);
byte[] responsebyte = client.UploadData(config.ServerAddress, System.Text.Encoding.UTF8.GetBytes(serialisedData));
}
在 nodejs 中,我目前有这种 https 设置:
_server = https.createServer({
key: fs.readFileSync(`${__dirname}\\bin\\cert\\${_config.sslkey}`, "utf8"),
cert: fs.readFileSync(`${__dirname}\\bin\\cert\\${_config.sslcert}`, "utf8")
}, _listener);
_server.listen(_config.port, "0.0.0.0");
function _listener(req, res) {
let data = []
req.on('data', chunk => {
data.push(chunk)
})
req.on('end', () => {
JSON.parse(data)
})
}
现在是我的问题。我无法获取 req 或 res 对象的任何数据。 “开启”功能都没有触发,我现在不知道该怎么办。在 NodeJS 中执行此操作的正确方法是什么? (c#代码不能改)
编辑: 这是有效的 c# 服务器代码。我如何将其转换为 nodejs?
HttpListener listener = new HttpListener();
listener.Prefixes.Add($"https://+:{Config.Port}/");
listener.AuthenticationSchemes = AuthenticationSchemes.Basic;
listener.Start();
for (; ; )
{
Console.WriteLine("Listening...");
IAsyncResult result = listener.BeginGetContext(new AsyncCallback(DoWork), listener);
result.AsyncWaitHandle.WaitOne();
result = null;
}
private void DoWork(IAsyncResult asyncResult)
{
HttpListener listener = (HttpListener)asyncResult.AsyncState;
HttpListenerContext context = listener.EndGetContext(asyncResult);
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
HttpListenerBasicIdentity identity = (HttpListenerBasicIdentity)context.User.Identity;
string data;
using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
{
data = reader.ReadToEnd();
}
....
More Code
....
string responseSerial = JsonConvert.SerializeObject(responseData);
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseSerial);
response.ContentLength64 = buffer.Length;
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
output.Close();
}
请您参考如下方法:
你在某处缺少 res.end() 来让 Node 的服务器知道它应该发回响应。在此之前,您可以写下您的实际回复。在您的确切 C# 代码和 Node 服务器的简化版本上进行了测试:
var http = require('http');
var _server = http.createServer(_listener);
_server.listen(1234);
console.log( 'started' );
function _listener(req, res) {
let data = []
req.on('data', chunk => {
data.push(chunk)
})
req.on('end', () => {
JSON.parse(data);
res.write('response')
res.end()
})
}
