NodeJs10 Node.js 디자인패턴, Promisification * Promisification : 콜백 기반 함수의 일부 특성을 알고있을 경우, 콜백 기반함수를 프라미스를 반환하는 동일한 함수로 변환할 수 있다. : 일부 고급 시나리오에서는 생성자를 사용하여 수동으로 프라미스를 생성해야 할 필요가 있기도 하다. 1) 지원하는 예 - fs 모듈의 promises 객체를 사용하면, fs API의 프라미스화된 버전을 사용할 수 있음 - superagent는 promise를 지원함 return superagent.get(url) .then((res) => { content = res.text; return mkdirpPromises(dirname(filename)) }) .then(() => fsPromises.writeFile(filename, content)).... .. 2023. 11. 30. Node.js 디자인패턴, 병렬실행 패턴 const tasks = [ /* ... */] let completed = 0 tasks.forEach(task => { task(() => { if(++completed === tasks.length){ finish() } }) }) 모든 작업을 한꺼번에 시작하고, 앞선 작업이 완료되기를 기다리지 않고 배열 내의 task에 대해 각각의 작업을 시작시킨다. 경쟁 (competitive race) :작업의 결과를 컬렉션에 모으거나, 배열의 요소를 필터링 또는 매핑하거나, 일정한 작업의 수가 완료되면 즉시 finish() 콜백을 호출하도록 할 수 있다. 2023. 11. 20. Node.js 디자인패턴, 순차실행 비동기제어 흐름 패턴 - 순차실행 비동기에서 콜백지옥을 생성하지 않고 순차실행을 할 수 있는 디자인 패턴 1. 알려진 일련의 작업 순차적 실행하기. - 일반적인 비동기 작업 완료 시, 각 작업이 다음 작업을 호출하는 패턴, 작업의 모듈화에 집중함. - 실행될 작업의 수와 양을 미리 알고 있을 경우 완벽하게 작동함. - 다음 작업 호출을 하드코딩 하는 ㅂ아식 function task1(cb){ awyncOperation(() => { task2(cb); }) } function task2(cb){ asyncOperation(() => { task3(cb); }) } function task3(cb){ asyncOperation(() => { cb(); }) } task1(() => { //task1, ta.. 2023. 11. 16. Node.js 디자인패턴, 콜백규칙적용 - 빠른반환원칙 * 빠른 반환 원칙 : 간단한 트릭을 사용하여, 함수의 중첩 수준을 줄일 수 있음. 이러한 코드 형식에서 if(err){ cb(err) }else{ //에러 발생하지 않았을 때 실행할 코드 } 아래와 같이 사용할 경우, 오류를 반환했을 때 즉시 함수로부터 복귀할 수 있음. if(err){ return(err) } //에러 발생 X시 실행할 코드 2023. 11. 15. [Node.js 디자인패턴] 모듈 시스템 1. 노출식 모듈 패턴 - JS의 주요 문제점 중 하나는 네임스페이스가 없다는 것이다. 모든 스크립트가 전여검위에서 실행되며, 내부 애플리케이션 코드나 종속성 라이브러리는 기능을 노출시키는 동시에 스코프를 오염시킬 수 있다. - 전역범위에 의존하는 것은 위험한 작업이며, 애플리케이션이 확장됨에 따라 개별적인 기능 구현에 의존해야 하는 상황이 발생한다. - 이러한 문제를 해결하기 위한 보편적인 기법이 노출식 모듈 패턴 (revealing module pattern) const myModyule = (() => { const privateFoo = () => { } const privateBar = [] const exprted = { publicFoo : () => { } publicBar : () => .. 2023. 8. 22. NodeJS Sqlite3연동, errno :14 , code :SQLITE_CANTOPEN 오류 Node로 sqlite3 파일을 연동해서 사용하고 있을 때 발생한 에러 errno :14 code :SQLITE_CANTOPEN 말그대로 sqlite파일을 열지 못할 때 발생하는 에러다. 나의 경우는 로컬에 저장되어있는 sqlite3파일을 상대경로를 사용해서 불러오려고 할 때 발생한 오류였으며, 검색결과 sqlite3파일은 상대경로를 사용해서 불러오는 것이 안되는 것 같다. 이유를 찾고 싶은데 아무리 봐도 못 찾겠다.. 어쨋든 그래서 임시방편으로 해결하는 방법은 __dirname 을 사용해서 현재 작업하고 있는 파일의 절대경로를 알아낸 뒤에 상대경로를 붙이는 방법이다 아래와 같이 사용할 경우 상대경로를 사용해서 불러올 수는 있으나 빌드했을때도 제대로 돌아가는지는 확인해봐야겠다. const path = _.. 2023. 7. 20. Javascript async/await const promise1 = Promise.resolve('success'); const promise2 = Promise.resolve('success2'); (async () => { for await (prommise of [promise1, promise2]]){ console.log(promise); } })(); * 노드처럼 비동기 위주로 프로그래밍을 할 때 유용 * Promise가 콜백지옥을 해결하긴 하였지만 .then과 .catch로 여전히 장황하며 promise hell이라는 용어도 있음. async function findAndSaveUser(Users){ let user = await Users.findOne({}); user.name = 'zero'; user = await use.. 2023. 7. 18. Javascript Promise 이해하기 Promise : 실행은 바로 하되 결괏값은 나중에 받는 객체, 결괏값은 실행이 완료된 후 then이나 catch 메서드를 통해 받는다. const condition = true; const promise = new Promise((resolve, reject) => { if (condition){ resolve('success'); }else{ reject('fail'); } }); promise .then((message)=> { // resolve가 호출되면 then이 실행되고 console.log(message); }) .catch((error) => { // reject가 호출되면 catch가 실행된다. console.error(error); }) .finally(()=> { console.lo.. 2023. 7. 18. express, 미들웨어란 미들웨어 : 요청과 응답의 중간에 위치하여 미들웨어라고 불림, 미들웨어는 요청과 응답을 조작하여 기능을 추가하기도 하고 나쁜 요청을 걸러내기도 함. : 미들웨어는 위에서붙 아래로 순서대로 실행되며, 요청과 응답사이에 특별한 기능을 추가할 수도 있음. : 미들웨어를 통해 요청, 응답에 다양한 기능을 추가할 수 있음. 유용한 패키지 많이 존재함 (ex, cookie-parser, express-session) 미들웨어 사용 - 아래 형태로 사용됨 app.use(middleware) 미들웨어가 실행되는 경우 - 주소를 첫번째 인수로 넣어주지 않으면 미들웨어는 모든 요청에서 실행, 넣는다면 해당 요청에서만 실행된다. app.use(middleware) // 모든 요청에서 미들웨어 실행 app.use('/abc'.. 2023. 6. 29. 노드 내장 객체 : console * 노드 내장객체 - console 대표 내장객체 console.log, 그 외에도 다양한 내장 객체가 있음. const string = 'abc'; const number = 1; const boolean = true; const obj = { outside : { inside : { key : 'value', }, }, }; console.time('전체 시간'); console.log('normal log'); console.log(string, number, boolean); console.error('err msg'); console.table([{ name : '제로', birth : 1994}, {name : 'hero', birth : 1998}]); console.table(obj); c.. 2022. 8. 4. 이전 1 다음