首页 > 解决方案 > 第一次请求后结束 NodeJS 错误后的 HTTP 写入

问题描述

我有一个从 IOT 设备接收消息的 TCP 服务器。收到消息后,我的 TCP 服务器通过HTTP将其发送到我的 REST 服务器。但是在第一个请求成功发送后,当 TCP 服务器要发送第二个消息时,我得到一个write after end错误。

这是我在 TCP 服务器上的代码:

const net = require("net");
const server = net.createServer(onConnected);

const http = require("http");
const querystring = require('querystring');

//HTTP STUFF

const req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
    res.setEncoding("utf8");
    res.on("data", (chunk) => {
        console.log(`BODY: ${chunk}`);
    })

    res.on("end", () => {
        console.log("no more data in res");
    })
});

req.on("error", (err) => {
    if (err.code === "ETIMEDOUT") {
        console.log("problem with request: connection timeout");
    } else if (err.code === "ECONNRESET") {
        console.log("problem with request: read timeout");
    } else {
        console.error(`problem with request: ${err.message}`);
    }
});

function send(postData) {
    console.log("start http");
    console.log("post data: " + postData);


    req.write(postData, function() {
        req.end();
    });


};

//TCP

server.listen(PORT, HOST, function() {
    console.log("Server listening on &j", server.address());
});

function onConnected(sock) {
    var remoteAddress = sock.remoteAddress + ":" * sock.remotePort;
    console.log("new client connected: %s", remoteAddress);

    sock.on("data", function(data) {
        console.log("%s says: %s", remoteAddress, data);
        let tcp_message = data.toString("utf8");
        let postData = querystring.stringify({
            "message": tcp_message
        });
        console.log("tcp message " + tcp_message)
        options.headers = {'Content-Length': Buffer.byteLength(postData) }
       send(postData);
       let mail_text = "Address: " + remoteAddress + " data: " + tcp_message;
    });

    sock.on("close", function(){
        console.log("connection from %s closed", remoteAddress);
    });

    server.on("error", function(err){
        console.log("connection %s error: %s", remoteAddress, err.message);
    });
}

标签: node.jshttptcp

解决方案


推荐阅读