2014-11-10 3 views
4

현대 Javascript로 시작 했으므로 Nodejs를 사용하기로 결정했습니다. 현재 데스크탑에서 JS에 가장 많이 사용되는 프레임 워크로 보이기 때문에 Nodejs가 왜 사용되지 않는지 이해할 수 없습니다. 내가하는 작업과 관련된 오류 메시지가 없습니다.Nodejs로 stdout 쓰기

그것은 작동하지 않습니다

var a = 5; 
var func = function(){return arguments.length;}; 
process.stdout.write(+func(1,2,3,a)); 

이 조각을 고려하고 다음과 같은 오류 메시지가

net.js:612 
    throw new TypeError('invalid data'); 
     ^
TypeError: invalid data 
    at WriteStream.Socket.write (net.js:612:11) 
    at Object.<anonymous> (var_1.js:3:16) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 

나는 C/C++ 프로그래머 해요를 생성하고이 또한 나에게 절대적으로 비밀입니다 나는 결과가 integer인지 확인하기 위해 func을 호출하기 전에 +을 사용 했으므로 write이 왜 불평입니까? + '\n'을 추가하는 어떤 말도 후

이 코드가 작동을하게

var a = 5; 
var func = function(){return arguments.length;}; 
process.stdout.write(+func(1,2,3,a) + '\n'); 

누구나 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

답변

8

.write()에 주어진 첫 번째 인수는 String 또는 Buffer 일 것으로 예상됩니다. Number은 허용되지 않습니다. '\n'을 연결시

process.stdout.write(func(1,2,3,a).toString()); 
가산 연산자 ( a + b)
process.stdout.write(String(func(1,2,3,a))); 

내재적 상기 전환한다.

+1

'문자열 또는 버퍼 여야합니다.' 정말 정말? 이 라이브러리의 디자인에서이 선택에 대한 의미있는 단일 이유가 있습니다. – user2485710

+2

@ user2485710 노드의 스트림은 바이트 문자열/배열/등을 표현하는 방법 인 Buffers를 중심으로합니다. 그것은 문자열을 허용합니다 왜냐하면 그것들은 쉽게 버퍼로 변환 될 수 있습니다 - if (typeof chunk === 'string') chunk = 새로운 버퍼 (chunk); –

2

You can only write strings or Buffers to sockets. (stdout은 소켓입니다.) 정수가 문자열 또는 버퍼가 아니므로 stdout에 쓰려고하면 오류가 발생합니다.

문자열을 정수로 연결하면 정수가 문자열로 변환 (변환)되므로 효과적입니다. 빈 문자열 (i+'')을 연결하거나 정수의 toString 메서드를 호출 할 수 있습니다.

0
var writeBuffer = Buffer(1); 
writeBuffer[0] = 1; //Value to be written 
process.stdout.write(writeBuffer);