Node 54

몽구스 ODM

몽구스 : 몽고 디비 작업을 쉽게 할 수 있도록 도와주는 라이브러리 ODM: Object Document Mapping: 객체와 다큐먼트를 매핑(1대 1 짝지음) 몽고 디비에 없어 불편한 기능들을 몽구스가 보완했다. 테이블과 유사한 기능, JOIN 기능 추가했다. mongoDB 드라이버는 몽구스 내에 내장되어 있어 다운로드할 필요가 없다 몽고 디비 연결하기(schemas/index.js) const mongoose = require('mongoose'); const connect = () => { if (process.env.NODE_ENV !== 'production') { //production 일때 mongoose.set('debug', true); //debug 모드를 true로 한다 } //요청..

관계 쿼리

Join include로 JOIN과 비슷한 기능 수행 가능(관계있는 것 엮을 수 있음)하다. 지연 로딩 get+모델명으로 관계있는 데이터 로딩 가능하다. as로 모델명 변경이 가능하다. include나 관계 쿼리 메서드의 where나 attributes 연관관계가 있는 테이블에 where 조건을 줄 수 있다. 생성 쿼리 댓글을 먼저 생성했다가, 후에 user에 연결할 때 이렇게 사용한다. 생성이 먼저 되고, 후에 연관관계가 정해진다. add+객체명으로 추가한다 id를 추가해 주거나, 객체 자체를 넣어주면 된다 여러 개를 추가(배열) 여러 댓글을 생성하고, 추가할 때 배열로 넣어주면 된다. 수정은 set+모델명, 삭제는 remove+모델명 을 쓰면 된다. SQL 직접 사용 시퀄라이저가 아닌 그냥 SQL을 ..

쿼리 알아보기

Insert 쿼리 create를 사용하면, insert문을 자동으로 생성해 준다. findAll() : 전체 조회 findAll 메서드를 쓰면 전체 조회가 가능하다. attributes로 배열을 주면, 배열에 있는 컬럼만, 출력이 가능하다 Select Where 연산자 gt를 통해 크다를 표시 할 수 있고, lt를 작다를 표시할 수 있다. 작거나 같다(lte) , 크거나같다(gte)를 쓰면 된다. or를 사용해 또는의 표기 할 수 있다. 정렬, limit, offset Update 쿼리 Delete 쿼리

관계 정의하기

users 모델과 comments 모델 간의 관계를 정의 1:N 관계 (사용자 한 명이 댓글 여러 개 작성) 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글)) 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자)) belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼) user.js //... static associate(db) { db.User.hasMany(db.Comment, { foreignKey: "commenter", sourceKey: "id" }); } //... user에서 관계를 가질 경우 hasMany가 된다.(1:N) 반대 입장에서 belongsTo가 될 수 밖에 없다. belongsTo가 있는 테이블에 ..

모델 만들기

Model을 만드는 방법 SQL직접 적용(mysql에 접속) 워크벤치 툴을 사용 model 파일을 사용 시퀄라이즈에서는 자료형을 표현하는 방식에서 조금 차이가 있다. models/user.js const Sequelize = require("sequelize"); module.exports = class User extends Sequelize.Model { static init(sequelize) { return super.init( { name: { type: Sequelize.STRING(20), allowNull: false, unique: true }, age: { type: Sequelize.INTEGER.UNSIGNED, allowNull: false }, married: { type: Se..

시퀄라이즈

시퀄라이즈 : SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리 ORM: Object Relational Mapping: 객체와 데이터를 매핑(1대1 짝지음)한다 MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환된다 자바스크립트 문법으로 데이터베이스 조작 가능하다 시퀄라이즈 예제: https://github.com/zerocho/nodejs-book/tree/master/ch7/7.6/learn-sequelize GitHub - ZeroCho/nodejs-book Contribute to ZeroCho/nodejs-book development by creating an account on GitHub. github.com 프로젝트 세팅 후, 콘솔을 통해 ..

템플릿 엔진

템플릿 엔진: HTML의 정적인 단점을 개선 반복문, 조건문, 변수 등을 사용할 수 있다 동적인 페이지 작성 가능하다 PHP, JSP와 유사하다 Pug 문법이 Ruby와 비슷해 코드 양이 많이 줄어든다 HTML과 많이 달라 호불호가 갈린다 익스프레스에 app.set으로 퍼그 연결한다 HTML 표현 변수 파일 내 변수 반복문 조건문 include 헤더, 푸터, 내비게이션 등의 공통부분을 따로 관리할 수 있어 편리 include로 파일 경로 지정 extends/ block 공통되는 레이아웃을 따로 관리할 수 있어 좋음, include와도 같이 사용 넌적스 Pug의 문법에 적응되지 않는다면 넌적스를 사용하면 좋다 Pug를 지우고 Nunjucks 설치하자 확장자는 html 또는 njk(view engine을 n..

라우터 분리하기

Express.Router app.js가 길어지는 것을 막을 수 있다 userRouter의 get은 /user와 /가 합쳐져서 GET /user/가 된다 Route 매개변수 :id를 넣으면 req.params.id로 받을 수 있다 동적으로 변하는 부분을 라우트 매개변수로 만든다 일반 라우터보다 뒤에 위치해야 한다 404 미들웨어 요청과 일치하는 라우터가 없는 경우를 대비해 404 라우터를 만들 수 있다 이게 없으면 단순히 Cannot GET 주소라는 문자열이 표시된다 라우터 그룹화 하기 router.route로 묶는다 Req 객체 req.app: req 객체를 통해 app 객체에 접근할 수 있습니다. req.app.get('port')와 같은 식으로 사용할 수 있습니다. req.body: body-par..

dotenv 사용하기

.env 파일 COOKIE_SECRET=zerochopassword DB_PASSWORD=nodejsbook const dotenv = require("dotenv"); dotenv.config(); //.env 파일을 읽어서 설정한다. //.env 파일 같은 경우 git에 올리면 안된다 //... app.use(cookieParser(process.env.COOKIE_SECRET)); //키가 소스코드에 유출되면 안된다 app.use( session({ resave: false, saveUninitialized: false, secret: process.env.COOKIE_SECRET, //쿠키를 서명하는 키, 이 키는 다른 사람에게 노출되서는 안된다 cookie: { httpOnly: true //자..

멀티파트 데이터 형식

multer 선언, 파일을 저장하는 upload 함수 작성 multer 함수를 호출한다. diskStorage는 하드디스크에 업로드 파일을 저장한다는 것이다 storage는 저장할 공간에 대한 정보 실제 서버 운영 시에는 서버 디스크 대신에 S3 같은 스토리지 서비스에 저장하는 게 좋다 Storage 설정만 바꿔주면 된다 destination은 저장할 경로이다 filename은 저장할 파일명(파일명+날짜+확장자 형식)이다. Limits는 파일 개수나 파일 사이즈를 제한할 수 있다 multer 미들웨어 종류(none, single, array, fields) single과 none, array, fields 미들웨어 존재한다 single은 하나의 파일을 업로드할 때, none은 파일은 업로드하지 않을 때..