在nodejs中获取最大调用堆栈大小超过错误

我是Node.js的新手,我正在使用Socket.IO开发一个简单的聊天应用程序。 我做了一个index.js文件和一个index.html文件。

我的index.js文件看起来像这样

var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); process.stdin.resume(); process.stdin.setEncoding('utf8'); var util = require('util'); app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); }); io.on('connection', function(socket){ socket.on('chat message', function(msg){ console.log('message: ' + msg); }); var txt = process.stdin.on('data', function (text) { process.tick() return util.inspect(text) }); socket.emit('chat message',txt); }); http.listen(3000, function(){ console.log('listening on *:3000'); }); 

我的index.html文件看起来像这样

 <!doctype html> <html> <head> <title>Socket.IO chat</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font: 13px Helvetica, Arial; } form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; } form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; } form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages li { padding: 5px 10px; } #messages li:nth-child(odd) { background: #eee; } </style> </head> <body> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /><button>Send</button> </form> <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> <script src="http://code.jquery.com/jquery-1.11.1.js"></script> <script> var socket = io(); $('form').submit(function(){ socket.emit('chat message', $('#m').val()); $('#m').val(''); return false; }); socket.on('chat message', function(msg){ $('#messages').append($('<li>').text(msg)); }); </script> </body> </html> 

我试图从控制台获取价值,并在浏览器上打印,反之亦然。 在这个应用程序聊天是在客户端和服务器之间。

当我运行index.js文件,我得到这个在terminal上

 listening on *:3000 

一切都很好,直到我从我的浏览器与localhost:3000的服务器,然后我得到这个在terminal上

 buffer.js:0 (function (exports, require, module, __filename, __dirname) { // Copyright Joy ^ RangeError: Maximum call stack size exceeded 

我如何解决这个问题? 我想从控制台(服务器)获取值并将其发送到浏览器(客户端)。

更新1

我得到这个错误

 process.tick() ^ TypeError: Object #<process> has no method 'tick' at ReadStream.<anonymous> (/home/sunil/Downloads/TPL/chat/index.js:16:14) at ReadStream.EventEmitter.emit (events.js:95:17) at ReadStream.<anonymous> (_stream_readable.js:746:14) at ReadStream.EventEmitter.emit (events.js:92:17) at emitReadable_ (_stream_readable.js:408:10) at emitReadable (_stream_readable.js:404:5) at readableAddChunk (_stream_readable.js:165:9) at ReadStream.Readable.push (_stream_readable.js:127:10) at TTY.onread (net.js:526:21) 

更新2 process.tick()process.nextTick()取代,然后我得到这个错误

 node.js:415 callback(); ^ TypeError: undefined is not a function at process._tickCallback (node.js:415:13) 

RangeError:超出最大调用堆栈大小。 该错误是由您的应用程序中某处的无限循环生成的。 在io.on('连接')中更新的代码…

 var txt = ''; process.stdin.on('data', function (text) { process.nextTick(); txt = util.inspect(text); }); io.on('connection', function(socket){ socket.on('chat message', function(msg){ console.log('message: ' + msg); socket.emit('chat message',txt); }); }); 

把socket.emit放在io.on('connection',function(socket){}); 直接将不断发射该套接字事件,就像一个无限循环,并提高堆栈大小范围的错误。 所以,请如上更新您的代码。