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로 새로 만들어준다
콜백함수를 쓰는 이유를 물으면 비동기무새되면 안된다
내가 원하는 시점에 함수를 실행시키고 싶어서이다.
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("/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도 보인다