이미지 업로드 multer 패키지로 이미지 업로드를 구현해보자. npm i multer 이미지를 어떻게 저장할 것인지는 서비스의 특성에 따라 달라진다. 이번 프로젝트에서는 input 태그를 통해 이미지를 선택할 때 바로 업로드를 진행하고, 업로드된 사진 주소를 다시 클라이언트에 알릴 것이다. db에는 경로만 저장한다. 우선 라우터를 작성하자. const express = require('express'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); const {Post, Hashtag} = require('../models'); const{ isLoggedIn } = require('./..
서버
데이터베이스 세팅 로그인 기능을 구현하기 위해 사용자 테이블이 필요하고, 게시글을 저장할 게시글 테이블도 필요하다. 해시태그를 사용하기 때문에 해시태그 테이블도 필요하다. models 폴더 안에 정의해보자. const Sequelize = require('sequelize'); module.exports = class User extends Sequelize.Model{ static init(sequelize){ return super.init({ email: { type: Sequelize.STRING(40), allowNull: true, unique: true, }, nick: { type: Sequelize.STRING(15), allowNull: false, }, password: { type:..
프로젝트 생성 140자의 단문 메시지를 보내고 공유하는 서비스를 따라 해 보자. nodebird라는 프로젝트를 만들자. { "name": "nodebird", "version": "1.0.0", "description": "sns service using express", "main": "index.js", "scripts": { "start": "nodemon app", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "hvvan", "license": "MIT" } npm i sequelize mysql2 sequelize-cli npx sequelize init 그리고 views, route, public, passport 폴더..
쿼리 수행하기 views 폴더 안에 html을 만들어 보자. 사용자 등록 결혼 여부 등록 아이디 이름 나이 결혼여부 {% for user in users %} {{ user.id }} {{ user.name }} {{ user.age }} {{ '기혼' if user.married else '미혼' }} {% endfor %} 댓글 등록 등록 아이디 작성자 댓글 수정 삭제 views/mongoose.html {{ message }} {{ error.status }} {{ error.stack }} views/error.html 이제 js파일을 만들어서 서버를 돌려보자. //사용자 이름을 클릭할 때 댓글 로딩 document.querySelectorAll('#user-list tr').forEach((el..
프로젝트 생성 { "name": "learn-mongoose", "version": "1.0.0", "description": "learn mongoose", "main": "index.js", "scripts": { "start": "nodemon app", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "hvvan", "license": "MIT", "dependencies": { "express": "^4.17.1", "mongoose": "^5.11.17", "morgan": "^1.10.0", "nunjucks": "^3.2.3" } } 프로젝트를 하나 생성해 위와 같이 packge.json을 만들자. 그리고 아래 패키지를..
몽고 DB 몽고디비는 대표적인 NoSQL이다. NoSQL이란 SQL을 사용하지 않는다는 말이다. SQL과 차이점은 다음과 같다. NoSQL에는 고정된 테이블이 없다. 따라서 컬럼을 따로 정의하지는 않는다. 예를 들어 MySQL은 users 테이블을 만들 때, name, age, married 등의 컬럼과 자료형, 옵션을 정의한다. 몽고디비는 그냥 users 컬렉션을 만들고 끝낸다. 또한, 몽고디비에는 JOIN기능이 없다. 하지만, 확장성과 가용성이 뛰어나 많이 사용되고 있다. MySQL에서의 테이블, 로우, 컬럼은 몽고디비에서 컬렉션, 다큐먼트, 필드라고 부른다. 또한, 자바스크립트 문법을 사용한다. 노드도 자바스크립트를 사용하므로 데이터베이스마저 몽고디비를 사용한다면 자바스크립트만 사용하여 웹 애플리케..
쿼리 수행 이전 포스트에서 작성한 코드들로 사용자 정보를 등록하고, 사용자가 등록한 댓글을 가져오는 서버를 만들어 보자. 우선 view부터 작성하자. 사용자 등록 결혼여부 등록 아이디 이름 나이 결혼여부 {% for user in users %} {{user.id}} {{user.name}} {{user.age}} {{'기혼' if user.married else '미혼'}} {% endfor %} 댓글 등록 등록 아이디 작성자 댓글 수정 삭제 views/sequelize.html {{ message }} {{ error.status }} {{ error.stack }} views/error.html 이제 sequelizejs 파일도 만들자. //사용자 이름을 눌렀을 때 댓글 로딩 document.que..
CRUD CRUD란 Create, Read, Update, Delete의 첫 글자를 딴 두문자어이다. 우선 CRUD를 하려면 테이블이 있어야 하니 테이블을 만들자. Create 데이터를 생성해서 데이터베이스에 넣는 작업이다. users 테이블에 데이터를 몇 개 넣어보자. INSERT INTO users (name, age, married, comment) VALUES ('홍길동', 24, 0, '자기소개1'); INSERT INTO users (name, age, married, comment) VALUES ('김철수', 32, 1, '자기소개2'); comments 테이블에도 넣어보자. 워크벤치를 사용하면 위와 같이 테이블에 직접 적고 하단에 apply를 누르면 insert가 완료된다. Read 조회는..
데이터 베이스 RDB의 대표격인 MySQL과 NoSQL의 대표인 몽고디비를 이용하여 서버 작업을 해볼 예정이다. 그전에 데이터베이스에 대한 기본적인 개념만 정리하고 실습해보자. 우선 MySQL을 설치해보자. https://dev.mysql.com/downloads/installer/ MySQL :: Download MySQL Installer Select Operating System: Select Operating System… Microsoft Windows Select OS Version: All Windows (x86, 32-bit) Windows (x86, 32-bit), MSI Installer 8.0.23 2.4M (mysql-installer-web-community-8.0.23.0.msi..
라우팅 분리 라우터를 만들 때는 요청 메서드와 주소별로 분기 처리를 하느라 코드가 복잡해진다. express를 이용하면 라우팅을 깔끔하게 관리할 수 있다. routes 폴더를 만들고 그 안에 index.js로 관리해보자. const express = require('express'); const router = express.Router(); router.get('/', (req, res) => { res.send('Hello world!!'); }); module.exports = router; index.js const { Router } = require('express'); const express = require('express'); const router = express.Router(); ..