프로그래밍/Node.js 8

[NodeJS] readFile, readFileSync - 리눅스와 윈도우간 차이점

문제점 및 증상 윈도우 환경에서 개발할 때 전혀 문제 없던 것이 리눅스 운영 환경으로 배포하였더니, 윈도우에서 발생하지 않던 오류가 발생하였습니다. 프론트 스크립트 파일의 문자열에 문자열 처리에 오류가 발생하였는데, 핸들바 템플릿을 통하여 전달된 문자열에 들어 있으면 안되는 "\n" 문자가 포함되어 브라우저에서 문법 오류가 발생하면서 프론트단 전체가 제대로 동작하지 않았습니다. 원인 분석 도저히 이해가 되지 않는 현상이라, 아래와 같은 간단한 프로그램을 작성하여 시험해 보았습니다. let fs = require('fs') let data_list = fs.readFileSync(process.cwd() + '/data_list.txt').toString() console.log(data_list) con..

[javascript] 실수를 정수형으로 바꾸기(소수점 버리기)

자바스크립트에서 실수를 정수형으로 바꿀 때, 주로 Math의 round(), floor(), ceil() 함수들을 이용했습니다. 그런데, 우연히 실수형 변수에 "| 0"을 하는 문법을 보고 도대체 무엇을 하는 코드인지 동작시켜 봤는데, 이게 물건이었습니다. 바로 다음 실행 결과를 보시면 이해가 빠르실 겁니다. >> 1.10 // === Math.floor(1.1) 1 >> -1.10 // === Math.ceil(-1.1) -1 >> 9.90 // === Math.floor(9.9) 9 >> -9.90 // === Math.ceil(-9.9) -9 즉, 실수에 "| 0" 연산을 하면 0보다 작은 음수일 경우에는 ceil() 함수처럼 동작하고 0보다 큰 실수는 floor() 함수처럼 동작합니다. 풀어서 설..

[javascript] 배열 순서를 마구 뒤섞기(shuffle)

자바스크립트에서 배열 내부의 항목들을 마구 뒤썩어주는 방법을 찾아 보니, 다양한 방법들이 있었는데, 그 중에서 쓸만한 방법들을 정리해 둡니다. 함수로 이용할 때는 다음과 같이 shuffleArray()라는 함수를 만들어서 이용하면 편리할 것 같습니다. function shuffleArray(a){//array let c=a.length;let b=d=c;while(c)b=Math.random()*(--c+1)|0,d=a[c],a[c]=a[b],a[b]=d } 위 함수를 임의의 배열에 적용한 결과는 다음과 같습니다. >> let unshuffled = ['hello', 'a', 't', 'q', 1, 2, 3, {cats: true}] >> unshuffled (8) ['hello', 'a', 't', '..

[nodejs] 구글 2FA 인증을 통한 SMTP 메일 발송 오류 해결기

문제점 및 증상 꽤 오래된 라즈베리파이를 이용하여 서비스에서 구글 메일 발송시 다음과 같은 오류가 발생하는 상황을 해결해 나간 과정을 정리해 둡니다. transporter.sendMail: Error: { Error: certificate is not yet valid at Error (native) at TLSSocket. (_tls_wrap.js:1092:38) at emitNone (events.js:86:13) at TLSSocket.emit (events.js:185:7) at TLSSocket._finishInit (_tls_wrap.js:609:8) at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:439:38) code: 'ECONNECTION', comman..

[nodejs] VSCode 디버그 콘솔에 winston 로그가 출력되지 않는 문제

문제점 및 증상 NodeJs에서 "Winston" 모듈을 설치하여 "transports.Console()"을 이용하여, 콘솔로 로그를 출력하는데 터미널에서 직접 소스를 실행하면 로그가 잘 표시되나, VSCode에서 실행하면 디버그 콘솔에 다음과 같이 아무런 메시지가 표시되지 않았습니다. 구현한 소스는 다음과 같습니다. const { createLogger, transports } = require("winston"); const consoleTransport = new transports.Console(); const logger = createLogger({ level: 'debug', transports: [consoleTransport] , stderrLevels: ['error', 'debug']..

Node.js MySQL 연동 - INSERT

nodejs에서 MySQL을 연동하는 간략한 방법에 대하여 정리해 둡니다. 데이터 추가 (INSERT) 기본적으로 데이터베이스 서버와 연결을 하고, 간단한 쿼리를 실행하는 예제는 아래와 같습니다. var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('INSERT INTO MEMBER VALUES ( ?, ?, ?, ? );' , ['login_id', 'password', 'member_name', 'email'] , fun..

Node.js MySQL 연동 - SELECT

nodejs에서 MySQL을 연동하는 간략한 방법에 대하여 정리해 둡니다. 간단한 데이터 조회 (SELECT) 기본적으로 데이터베이스 서버와 연결을 하고, 간단한 쿼리를 실행하는 예제는 아래와 같습니다. var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) { if (error) throw error; console...

Node.js의 Timers

일정 시간 후에, 특정한 작업을 실행하고자 할 때, Timer를 이용하면 편리하게 작업할 수 있습니다. Timers 관련하여 다음 세 개의 함수가 주로 이용됩니다. setTimeout() setInterval() setImmediate() 각 함수들의 차이점들을 하나씩 살펴 보도록 하겠습니다. setTimeout() "setTimeout()" 함수는 첫 번째 인자로 만료시간 이후 실행할 함수를 받고, 두 번째 인자로 만료시간 (밀리 초) 설정값을 받습니다. 추가적으로 인자를 더 전달할 수 있는데, 그 인자는 첫 번째 함수의 인자로 전달됩니다. 반환값으로는 "setTimeout()" 함수로 생성된 "Tmieout" 객체를 받습니다. 이 함수는 브라우저 JavaScript API의 window.setTime..

728x90