전체 글 295

[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 는 유저한테 요..

[Node.js] 글 작성기능 만들기 2 (insertOne, 예외 처리)

app.post('/add', async (요청, 응답) => { console.log(요청.body) await db.collection('post').insertOne({ title: 요청.body.title, content: 요청.body.content }) 응답.redirect('/list') }) 다음과 같이 DB 로 저장을 시킬 수 있다. 요청.body 를 출력하면 데이터가 object 자료형식으로 출력되는데, 요청.body.title 처럼 해당 데이터를 지정한 DB의 key 값에 매치시켜 저장할 수 있다. 저장된 후에 응답.redirect('/list') 를 하면 자동으로 페이지를 옮긴다. 하지만 위 코드는 서버에서 한 번 검열하는 기능이 없어 안정성면에서 떨어진다. app.post('/ad..

[Node.js] 글 작성기능 만들기 1 (POST 요청)

글 작성 기능 동작 1. 유저가 글작성페이지에서 글을 작성해서 서버로 글을 보내고 2. 서버는 글을 받으면 잘썼나 확인해보고 3. 서버는 그걸 DB에 저장 write.ejs 파일 생성 후 글쓰기 전송 데이터를 보내기 위해서 (POST method 를 이용하기 위해서) form 태그를 사용. action 속성 열어서 /url 채우고 method 속성 열어서 POST 로 채운 후에 input 속성들에 이름을 붙여준다. 서버에서 글 받으면 잘 보냈나 확인해보려면 app.post('/add', (요청, 응답) => { console.log(요청.body) }) 이 코드를 넣을건데, 먼저 상단에 app.use(express.json()) app.use(express.urlencoded({extended:true}..

[Node.js] RESTful API

1. Uniform Interface - 여러 URL과 method는 일관성이 있어야합니다. - 하나의 URL로는 하나의 데이터를 가져오게 디자인하는게 좋고 - 간결하고 예측가능하게 URL과 method를 만드는게 좋습니다. 2. Client-server 역할 구분 유저에게 서버역할을 맡기거나 DB를 직접 입출력하게 시키면 안좋습니다. 3. Stateless 셋째로 요청들은 서로 의존성이 있으면 안되고 각각 독립적으로 처리되어야합니다. 4. Cacheable 서버가 보내는 자료들은 캐싱이 가능해야합니다. 그러니까 자주 받는 자료들은 브라우저에서 하드에 저장해놓고 서버에 요청을 날리는게 아니라 하드에서 뽑아쓰는걸 캐싱이라고 합니다. 5. Layered System 서버기능을 만들 때 레이어를 걸쳐서 코드가..