0502 node수업

sungjin6576·2022년 5월 9일
0

nodejsClass

목록 보기
1/2

res.send(), res.json(), res.render()

res.send()는 string이 간다

res.json({key: "value"}) 과 res.send('{key:"value"}') 의 결과는 같다

보낼때는 무조건 string 타입으로 보내주기 때문에 객체를 string으로 바꾼것이 json이다

객체를 보낼 때 일일히 string 으로 바꿔 보내기 힘드므로 res.json으로 보낸다
Express res.json과 res.send 비교 하신분 링크

res.render() 파일 안에 있는 모든 텍스트를 일단 가져온다.

그 후 view engine을 통해 해석해서 html로 새로 만들어준다

callback

콜백함수를 쓰는 이유를 물으면 비동기무새되면 안된다
내가 원하는 시점에 함수를 실행시키고 싶어서이다.

const call = () => {
    console.log("call 실행")
    return "hello";
}

const send = () => {
    console.log("send 실행")
    return "world";
}

// call 함수와 send 함수가 name이 실행되고 나서 실행되면 좋겠다
// 근데 선택적으로 하고 싶다

함수 자체를 인자로 넣는 callback을 사용하면 들어오는 인자에 따라 if문으로 경우를 나누는 것보다 훨씬 쉽게 구현 가능

const name = (type) => {
    if(type === "call"){
        call();
    }
    else{
        send();
    }
  	.
    .
    .
}
name(call);

===================================
  
const name = (callback) => {
    callback();
}

name(call)

app.use 와 next

app.use("/path")는 무엇일까 get이든 post든 request method에 상관없이 path만 맞으면 callback(미들웨어) 실행하겠다

path를 생략하면 모든 곳에서 그렇게 하겠다

const express = require("express");
const app = express();

app.use((req,res)=>{
    console.log("first");
})
// 모든path에서 first라는 콘솔

app.get("/",()=>{(req,res)
    res.send("hello world!!!")
})

// url에 해당되는 경우 가장 위의 것이 실행되고 끝난다
// 따라서 콘솔만 찍히고 헬로 월드는 보이지 않음

모든 path 에서 콘솔로그가 실행되는 코드가 맨 위에 있다면 나머지 path들에 대한 미들웨어는 실행되지 않는다
하지만 넥스트가 있으면 미들웨어가 실행되고나서 다음 미들웨어도 실행한다

app.use((req,res,next)=>{
    console.log("hello next")
  	// res.send("hello err") 
  	//next 쓸 때 res.send 두번 쓰면 에러난다
    next()
})

app.get("/",(req,res)=>{
    res.send("hello next world!!!")
})
// 해당 url에 들어가면 콘솔도 찍히고 hello next world도 보인다

0개의 댓글