컴퓨터 프로그래밍 158

[Node.js] 검색기능 만들기

게시물에서 내가 원하는 값을 입력하고 그 입력한 값이 포함된 게시물을 검색하는 기능을 추가하려했다. 1. 검색 UI 하나 만들고 거기에 "안녕" 이라고 검색어를 입력해서 서버로 전송하면 2. 서버는 DB에서 "안녕"이 포함된 제목을 가진 게시물들을 찾아서 3. 그 게시물들을 ejs 파일에 넣어서 유저에게 보내주기 한글로 풀면 위같은 과정이 필요하다. 검색 검색 ui 를 만들어줬다. form 태그를 이용할 수도 있었지만 다른 방법을 선택했다. document.querySelector('.search-send').addEventListener('click', function(){ let inputdata = document.querySelector('.search').value location.href = ..

[Node.js] API들 다른 파일로 분리하기 (Router)

server.js 와 같은 선상에 routes 라는 폴더를 만들고 안에 shop.js 파일을 만들어준다. const router = require('express').Router() router.get('/shop/shirts', async (요청, 응답) => { 응답.send('셔츠파는 페이지임') }) router.get('/shop/pants', async (요청, 응답) => { 응답.send('바지파는 페이지임') }) module.exports = router 안에 맨 위 줄 맨 아래 줄 코드를 넣고 사이에 위와 같이 코드를 넣어준다. server.js 의 위 코드를 넣고싶은 부분에 app.use('/', require('./routes/shop.js')) 이렇게 넣어주면 정상 작동한다. 추..

[Node.js] JWT, session, OAuth

회원가입 : 1. 유저가 가입하면 아이디/비번을 DB에 저장해둠 로그인 : 1. 유저가 로그인시 아이디/비번을 서버로 보냄 2. 서버는 DB에 있는 아이디/비번과 유저가 보낸 아이디/비번이 일치하는 경우 입장권을 발급해줌 로그인이 필요한 서버기능 : 1. 유저는 서버에 GET/POST로 데이터 요청시 입장권도 함께 제시함 2. 서버는 입장권 확인 후 데이터나 페이지 보내줌 session 방식 장점 매번 GET/POST 요청할 때 마다 DB를 조회해보기 때문에 하나하나의 요청마다 엄격하게 유저를 체크해볼 수 있음 단점 그 만큼 DB의 부담이 심해질 수 있음 그래서 유저가 많은 사이트들은 조금 더 빠른 Redis 같은 DB를 사용하기도 함 token 방식 번외 : OAuth 어떤 유저의 A 사이트의 사용권한..

[Node.js] 페이지네이션

app.get('/list/1', async (요청, 응답) => { let result = await db.collection('post').find().limit(5).toArray() 응답.render('list.ejs', { 글목록: result }) }) app.get('/list/2', async (요청, 응답) => { let result = await db.collection('post').find().skip(5).limit(5).toArray() 응답.render('list.ejs', { 글목록: result }) }) app.get('/list/3', async (요청, 응답) => { let result = await db.collection('post').find().skip(10..

[Node.js] AJAX, query string

우선 AJAX 를 이용해 POST 데이터 전송을 하려면 html 코드 아래에 script 태그를 넣고 document.querySelectorAll('.delete')[0].addEventListener('click',function(){ fetch('/url', { method : 'POST', headers : { 'Content-Type' : 'application/json' }, body : '데이터' }) }) 위와 같이 써주면 된다. AJAX 를 이용하면 새로고침 없이 데이터를 주고받을 수 있는 장점이 있다. body : JSON.stringify({a : 1}) array 나 object 데이터를 주고받고 싶으면 앞에 위와 같이 JSON.stringify 를 붙여주자. 서버로 데이터를 전송하..

[Node.js] 수정기능 만들기 2 MongoDB 수정문법

updateOne 추가 문법 대충 { like : 10 } 이런 식으로 숫자 하나만 기록해봄 db.collection('컬렉션명').updateOne( { _id : new ObjectId('수정할 document _id') }, { $set: { like : 1 } } ) 이렇게 코드를 짜면 like 항목이 1로 변합니다. $set을 쓰면 기존 값을 덮어쓰기해줘서 그럼 db.collection('컬렉션명').updateOne( { _id : new ObjectId('수정할 document _id') }, { $inc: { like : 1 } } ) 그게 싫으면 $inc 하면 됨 그러면 1로 덮어쓰기가 아니라 +1을 해줬음 -1 적으면 -1 해줌 그래서 숫자 증감해주고 싶을 때는 $inc로 변경하면 되겠..

[Node.js] 수정기능 만들기 1

server.js app.get('/edit/:id', async (요청, 응답) => { let result = await db.collection('post').findOne({ _id: new ObjectId(요청.params.id) }) console.log(result) 응답.render('edit.ejs', { result: result }) }) app.post('/edit', async (요청, 응답) => { try { let result = await db.collection('post').updateOne({ _id: new ObjectId(요청.body.id) }, { $set: { title: 요청.body.title, content: 요청.body.content } }) 응답.r..

[Node.js] 상세페이지 만들기 2 (링크 만들기)

를 하면 html 에서 데이터를 띄워볼 때 array 나 object 값이어도 내용을 깨지지 않고 봐볼 수 있다. server.js try { let result = await db.collection('post').findOne({ _id: new ObjectId(요청.params.id) }) console.log(result) if (result == null) { 응답.status(404).send('이상한 url 입력함') } 응답.render('detail.ejs', { 글: result }) } catch (e) { console.log(e) 응답.status(404).send('이상한 url 입력함') } }) list.ejs 우선 list.ejs 파일에서 다음과 같이 a태그를 넣어서 자동으..

[Node.js] 상세페이지 만들기1 (URL parameter)

const { MongoClient, ObjectId } = require('mongodb') ObjectId 를 사용하기 위해 위의 코드로 수정해준다 app.get('/detail/:aaaa', async (요청, 응답) => { let result = await db.collection('post').findOne({ _id : new ObjectId('65438fd11b215d628373e1d9') }) console.log(요청.params) 응답.render('detail.ejs') }) :aaaa 를 뒤에 붙여서 유저가 임의로 뒤에 갖다붙힐 수 있도록 했고, 주의할 점은 아무것도 갖다붙히지 않으면 /detail 로 이동할텐데 이는 명시하지 않아서 에러가 났었음 요청.params 는 유저한테 요..