无效的非字符串/缓冲区块Node.js

invalid non-string/buffer chunk Node.js

本文关键字:Node js 缓冲区 字符串 无效      更新时间:2023-09-26

我在大学学习Node.js,这是我第一次学习这种编程语言。我在尝试构建聊天服务器时遇到了一些错误。当我尝试将一个客户端连接到服务器时,连接会立即关闭,并得到错误Invalid non-string/buffer chunk。我上传了一张截图,让你看看哪里出了问题,因为我已经考虑了一段时间,找不到任何解决方案。

我的Javascript代码:

var net = require('net');
var s = require
var sockets = [];
var nombres = [];
var nombresUsados = [];
console.log("Se ha iniciado el sevidor");
var server = net.createServer(function(socket) {
    socket.push(socket);
    nombres.push("Cliente:" + sockets.indexOf(socket));
    nombresUsados.push("Cliente:" + socket.indexOf(socket));
    console.log("Cliente aceptado, nick:" + nombres[sockets.indexOf(socket)]);
    socket.write("Bienvenido" + nombres[sockets.indexOf(socket)] + "'n");
    socket.on('data', function(d) {
        var entrada = d.toString();
        var UsuarioUnico = entrada.match(/^msg/);
        var cambiarNick = entrada.match(/^nick/);
        var quit = entrada.match(/^quit/);
        if (cambiarNick == "nick") {
            var repetido = 0;
            var nombresSinNick = entrada.replace(cambiarNick, '');
            for (var i = nombres.length - 1; i <= 0; i--) {
                if (nombresSinNick.substring(0, nombres[i].toString().length) == nombres[i].toString()) {
                    socket.write("KO, escoja otro nombre'n")
                    repetido = 1;
                }
            };
            if (repetido == 0) {
                nombres[sockets.indexOf(socket)] == nombresSinNick.trim();
                process.on('uncaughtException', function(err) {
                    socket.write("KO'n");
                });
                socket.write("OK. " + nombres[sockets.indexOf(socket)] + "'n");
                console.log(nombresUsados[sockets.indexOf(socket)]) + "su nombre ha sido cambiado por:" + nombres[sockets.indexOf(socket)];
                nombresUsados[sockets.indexOf(socket)] = nombresSinNick.trim();
            }
        } else if (UsuarioUnico = "msg") {
            var nombresSinMsg = entrada.replace(UsuarioUnico, '');
            var encontrado = 0;
            for (var i = nombres.length - 1; i <= 0; i--) {
                if (nombresSinMsg.substring(0, nombres[i].toString().length) == nombres[i].toString()) {
                    var mensaje = nombresSinMsg.replace(nombres[i], '');
                }
            };
            socket.on('end', function() { // CALLBACK: desconexión de cliente
                if (quit == 'quit') {
                    var i = nombres[sockets.indexOf(socket)];
                    sockets.splice(i, 1);
                    console.log("Ha salido el usuario:" + nombres[sockets.indexOf(socket)]);
                }
            });
        }
    });
});
server.listen(9000);

我认为问题出在线路socket.push(socket)上。你的意思可能是sockets.push(socket)。您现在所做的是尝试将套接字实例推入套接字流,但失败的原因是,正如错误所说,它不是字符串或缓冲区。