본문 바로가기

전체보기

(286)
mongoose를 이용한 validate 설정 1. 에러 로그가 나올 수 있게 하는 예제 const schema = new mongoose.Schema({ name: { type: String, required: true }, // name 값이 있어야 한다. password: String }); const Users = mongoose.model('Users', schema); async function createUsers() { const users = new Users({ password: '12345678' // name이 빠졌다. }); try { const result = await course.save(); console.log(result); } catch (ex) { // 오류가 발생해서 catch로 빠진다. console.log(..
mongoose를 이용한 MongoDB CRUD 방법 1. collection을 만들고 document를 생성하는 방법 (collection은 관계형 데이터의 table과 같고 document는 row와 같다.) const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/database') // 이름을 정해줄 수 있다. .then(() => console.log('몽고디비가 연결됐습니다.')) .catch((error) => console.log('몽고디비 연결에 실패했습니다.', error)); const schema = new mongoose.Schema({ // 데이터 타입 name: String, level: Number, hobby: [ String ], date: { t..
promise를 동기적인 모양으로 처리하는 async와 await promise를 처음 접하면 다소 복잡해서 이해하기 쉽지 않다. 비동기라는 개념이 낯설기 때문이다. 그러나 promise의 raw한 문법 대신 async와 await를 쓰면 일반적인 동기 코드를 쓴 것처럼 표현할 수 있다. async getData() { // await을 쓰려면 async 키워드를 쓴 함수로 감싸줘야 한다. const result = await fetch(/* ... */); // promise가 resolve될 때가지 await 했다가 promise가 담고 있는 결과 값을 result에 준다. console.log(result); } 동기적인 함수처럼 보이지만 내부적으로는 promise를 쓰는 것과 똑같이 돌아간다. 때문에 await를 쓴다고 쓰레드가 멈춰 있는 게 아니고 요청을 날린..
Promise.all 둘 이상의 비동기 작업을 기다린 뒤 처리해야할 경우 Promise.all을 쓴다. const p1 = new Promise((resolve, reject) => { /* ... */ resolve(1); }); const p2 = new Promise((resolve, reject) => { /* ... */ resolve(2); }); Promise.all([p1, p2]); // p1과 p2가 resolve 될 때 resolve된 promise를 리턴한다. .then(result => console.log(result)) .catch(error => console.log(error)); // 둘 중 하나라도 reject 되면 catch로 빠진다.
express의 router 사용 예제 const user = require('./user'); const express = require('express'); const app = express(); app.use('api/user', user); app.listen(3000, () => console.log('서버가 가동 중입니다.')); // app.js const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('user를 요청했습니다.'); }); module.exports = router; // user.js
express의 유용한 미들 웨어 express.json은 request의 payloads에 json이 들어왔을 경우 json 객체로 파싱해 request.body에 넣어주는 역할을 한다. app.use(express.json()); helmets은 HTTP 헤더를 설정해 express 앱을 보호한다. https://expressjs.com/ko/advanced/best-practice-security.html#use-helmet app.use(helmets()); morgan은 HTTP 요청 로그를 뿌려준다. http://expressjs.com/en/resources/middleware/morgan.html app.use(morgan('tiny')); 그밖의 미들 웨어 : https://expressjs.com/ko/resources..
npm 유용한 명령어들 // 특정 버전의 모듈을 설치할 때 (최신 버전부터는 --save라는 키워드를 넣지 않아도 된다.) npm i mongoose@2.4.2 // i 뒤에 -D 옵션을 추가하면 devDependencies에 설치된다. npm i -D webpack // node_modules에 실제로 설치 되어 있는 모듈들의 버전을 확인할 때 npm list --depth=0 // 모듈(mongoose)에 들어 있는 모듈들의 버전을 보고 싶을 때 npm view mongoose dependencies // 모듈(mongoose)의 모든 버전 리스트를 보고 싶을 때 npm view mongoose versions // 설치된 모듈이 최신 버전인지 확인할 때 npm outdated // devDependencies에 설치할 때..
비동기로 작동하는 node.js의 메소드 원리 node.js의 기본 모듈에는 보통 동기 메소드와 비동기 메소드가 패어로 준비돼 있다. 예를 들어 fs 모듈에는 비동기로 readdir이라는 메소드가 있고 readdirSync라는 메소드가 있다. 자바스크립트는 싱글 스레드이기 때문에 만약 서버에서 동기 메소드인 readdirSync를 쓰면 여러 클라이언트의 요청에 대한 응답을 바로바로 보내줄 수 없기 때문에 절대 써서는 안 된다. 또한 비동기 메소드의 두 번째 인자에는 콜백 함수가 들어오고 비동기가 완료됐을 때 호출된다. fs.readdir('./', function(err, files) { if (err) console.log(err); else console.log(files); }); 만약 비동기 과정에서 오류가 발생하면 첫 번째 인자에는 오류가 ..