TIL030_210428
🍊 감상
어려운 부분 공부할 때 집중 안 하려는 안 좋은 버릇 고치기
📙 열품타 코딩 시간 9hour
👍🏼 -
👎🏼 -
🚀 목표
- Udemy에서 Javascript 강좌 수강하기 (424/682)
- 개인 프로젝트 진행
📣 The Web Developer Bootcamp 2021
35. Defining RESTful Routes
35. Defining RESTful Routes
patch request : suppoesd to be used when we are patching a resource either updating or adding on som thing to an existing resource.
Payload only contains that patch.
put request : Payload includes a whole comment - not just the text, but also the id, also the user name. We just replace what was already there in our database with the new payload.
const path = require('path');
//node.js의 path 모듈로 운영체제별로 경로 구분자가 달라 생기는 문제를 해결한다
//폴더와 파일의 경로를 쉽게 조작할 수 있다
const methodOverride = require('method-override');
//RESTful API의 7가지 패턴 중 put(업데이트),delete(삭제)는 html이 지원하지 않는다
//app.post를 대신 사용할 수 있으나 RESTful 패턴에 부합하기 위해 method-override 패키지 사용
const { v4: uuid } = require('uuid');
//universally unique identifier 고유한 아이디 생성하는 라이브러리
//v4는 랜덤값을 기반으로 생성하는 것
미들웨어
응용 소프트웨어가 운영체제로부터 제공받는 서비스 이외에 추가적으로 이용할 수 있는 서비스를 제공하는 컴퓨터 소프트웨어. 다른 기종간 플랫폼을 연결하여 데이터를 주고받을 수 있도록 중간에서 매개역할을 하는 소프트웨어.
프레임워크
개발을 하는 데 있어 표준을 제공해주고 다른 여러 서비스들을 통합, 편리하게 제공해주는 환경
Express
라우팅, 정적파일 호스팅 관리, 템플릿 엔진, 보안, 세션 등의 api를 제공, node.js 상에서 동작하는 웹 개발 프레임워크로서 node.js의 미들웨어 기능을 한다.
Routing
라우팅은 하나의 접속에 따른 여러 개의 망으로 분리해주는 기능, 기본 접속 index.js로 들어온 뒤 해당 파일에서 각 url 별로 분기를 태워 서비스를 수행한다.
static file
js, css, image, font 등과 같이 개발자가 사전에 미리 서버에 저장해둔 파일들을 말한다.
const express = require('express');
//require로 모듈을 불러온다
const app = express();
//express()를 호출하여 미들웨어 셋팅을 한다
parsing
가지고 있는 데이터를 내가 원하는 형태의 데이터로 가공하는 과정
이러한 과정을 수행하는 모듈 혹은 메소드를 parser이라고 한다.
app.use(express.urlencoded({ extended: true }));
//미들웨어 없이 req.body에 접근할 경우 디폴트값이 undefined로 설정돼있다
//request body에서 post request한 데이터를 파싱하기 위한 것
app.use(express.json());
//req.body에서 post한 json데이터를 파싱하기 위한 것
app.use(methodOverride('_method'));
//html이 지원하지 않는 put,patch,delete request를 사용하기 위한 것
app.set('views', path.join(__dirname, 'views'));
//views는 사용하는 템플릿 엔진이 있는 디렉토리이다.
//뷰 페이지의 폴더 기본 경로로 directoryname+views로 하겠다는 것, 절대적 위치 설정
//join all arguments together and normalize the resulting path
app.set('view engine', 'ejs');
//템플릿 엔진 설정을 ejs로 한다,
//ejs는 정적인 html을 템플릿을 활용해 동적으로 만든다, html의 태그처럼 js 삽입 가능
app.listen(3333, () => {
console.log('on port 3333');
});
//listen()로 오픈할 포트를 정의한다.
//서버의 상태가 listen이기에 다른 접속으로부터 대기 상태가 된다
//index - renders multiple tweets
app.get('/tweets', (req, res) => {
res.render('tweets/index', { tweets });
});
//new - render a form
app.get('/tweets/new', (req, res) => {
res.render('tweets/new');
});
//create - creats a new tweet
//const username = req.body.username;
app.post('/tweets', (req, res) => {
const { username, tweet } = req.body;
comments.push({ username, tweet, id: uuid() });
res.redirect('/tweets');
});
//show - details about one particular tweet
app.get('/tweets/:id', (req, res) => {
const { id } = req.params;
const tweet = tweets.find((t) => t.id === id);
res.render('twwets/show', { tweet });
});
//eidt - renders a form to edit a tweet
app.get('/tweets/:id/edit', (req, res) => {
const { id } = req.params;
const tweet = tweets.find((t) => t.id === id);
res.render('tweets/edit', { tweet });
});
//update - updates particular tweet
app.patch('/tweets/:id', (req, res) => {
const { id } = req.params;
const foundTweet = tweets.find((t) => t.id === id);
const newTweetText = req.body.tweet;
foundTweet.tweet = newTweetText;
res.redirect('/tweets');
});
//delete/destroy - removes a single tweet
app.delete('/tweets/:id', (req, res) => {
const { id } = req.params;
tweets = tweets.filter((t) => t.id !== id);
res.redirect('/tweets');
});
36. Our first database : MongoDB
365. Introduction to database
why use a database instead of saving to a file
Database can handle large amount of data efficiently and store it compactly.
They provide tools for easy insertion, querying(파일의 내용을 알아내는 것, 검색, 명령을 요청해서 원하는 정보를 추출하는 것, sort, filter), and updating of data.
They generally offer security features and control over access to data.
They generally scale well.
366. SQL vs NoSQL Databases
SQL database
structured query language database are relational databases. We pre-define a schema(데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합, 개체, 속성, 관계 및 제약 조건에 대해 전반적으로 정의한다) of tables before we insert anything. (관계형 데이터베이스)
No-SQL database
NoSQL databases do not use SQL. There are many types of no-sql databases, including document, key-value, and graph stores.
-> more flexibility and freedom
367. Why we're learning mongo
- Mongo is very commonly used with Node and Express (MEAN & MERN stacks)
- It's easy to get started with
- It plays particularly well with javascript
MEAN: MongoDB, Express, Angular, Node
MERN: MongoDB, Express, React, Node
LAMP: 리눅스, 아파치, MySQL, PHP.
-> MySQL 배워보도록 (sql database)
370. The mongo shell
mongo
show dbs (데이터 안 들어간 데이터베이스 안 보임)
use animalShelter (create db)
db (데이터 안 들어간 데이터베이스도 보임)
371. What on earth is BSON
bson(binary json) is more compact that json
372. Inserting with mongo
collection : grouping of data in database. (container of similar data)
use animalShelter (create db and go into db)
db.dogs.insertOne({name: "charile", age:3, breed:"corgi", catFriendly: true})
// dogs는 collection
// insertOne 이나 insertMany보다는 insert를 자주 쓴다
// {} 오브젝트 안은 json 형태로 안 적고 javascript 형태로 적어도 알아서 bson으로 바꿔줄 것
show collections
db.dogs.find() //콜렉션 안 모두 보여줌
_id: mongo에서 자동으로 만들어주는 것, primary key, 콜렉션 안에서 유일함
373. Finding with Mongo
db.dogs.find({breed:"corgi"})
db.dogs.find({catFrienly:true, age:17})
// instead of returning all of them together in some collection at once, this returns a cursor that we can then iterate over or we can just print it out.
// find() returns the cursor of refernce to the results.
db.cats.find() = db.cats.find({})
374. Updating with Mongo
db.dogs.updateOne({name: 'Charlie'}, {$set: {age:4, breed:'Lab'}})
-> first argument: selector
-> second argument: key-value to update
db.dogs.updateMany({catFriendly:true},{$set: {isAvailable:false}})
-> 없으면 추가됨
db.cats.updateOne({age:6}, {$set:{age:7}, $currentDate:{lastChanged:true}})
375. Deleting with Mongo
db.cats.deleteOne({name: 'Blue'})
db.dogs.deleteMany({isAvailable:false})
db.dogs.deleteMany({}) -> delete entire collection
crud: create, read, update, delete
376. Additional Mongo operators
{name:'Rusty', personality:{catFriendly: true, childFriendly: true}}
property childFriendly is nested inside of personality
->db.dogs.find({childFriendly:true}) 이건 틀린 문법
->db.dogs.find({'personality.childFriendly':true})
gt greater than db.dogs.find({age: {gt: 8}})
gt greater than or equal to db.dogs.find({age: {gt: 8}})
$lt less than
in : breed가 Mutt or Corgi & age is less than 10 db.dogs.find({breed: {in: ['Mutt', 'Corgi']}, age:{$lt: 10}})
nin : not in
db.dogs.find(or: {childFriendly:true}, age:{lt: 10}})
37. Connecting to Mongo with Mongoose
378. What is mongoose
ODM
object data mapper or object document mapper
ODMs like mongoose map document coming from a database into usable javascript objects. 객체와 문서를 매칭한다 -> 자바스크립트의 객체인 object와 mongodb의 문서인 document, 문서를 db에서 조회할 때 자바스크립트 객체로 바꿔준다.
Mogoose
Mogoose provide ways for us to model out our application data and define a schema. It offers easy ways to validate data and build complex queries from the comfort of JS.
connects mongo and node
379. Connecting mongoose to mongo
npm i mongoose
//in index.js
const mongoose = require('mongoose');
mongoose
.connect('mongodb://localhost:27017/movieApp', {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log('connected');
})
.catch((err) => {
console.log('error');
console.log(err);
});
//node index.js -> connected
Author And Source
이 문제에 관하여(TIL030_210428), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@keepcalm/TIL030210428저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)