-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnote.txt
89 lines (78 loc) · 3.77 KB
/
note.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
미들웨어
- express가 실행되면서 들어온 어떤 request가 응답이 되어 나갈때까지 거치는 모든 함수
- express 자체가 함수들을 거치는 구조이고 각 함수 하나하나를 미들웨어라 본다
- 인자 : req, res, next(미들웨어가 언제끝날지 모르기 때문에 next()를 해줘야함)
- 한번에 순서대로 쭉 붙여 쓸 수도 있다.
ex) app.use("/", (req, res, next) => {
console.log("Middleware 1");
},(req,res,next)=>{
console.log("Middleware 1.2");
});
- 뒤쪽 미들웨어에 값을 넘겨주는 방법
: req에 mutation을 주면 뒤쪽에서도 사용가능하다
: ex) req.requesredAt = requesredAt; || req.body = body;
- async 미들웨어
: async(req, res, next)이런 식으로 사용
: 안쪽에서 await사용가능
라우팅
- app.use()에 path pattern, regex, array등을 사용
path pattern:
ab?cd : acd || abcd, b가 있거나 없거나
ab+cd : abcd || abbcd || abbbcd, b가 몇번이나 반복되거나
ab*cd : abcd || ab_cd || abbbcd, ab와 cd사이에 무엇이든
a(bc)?d : 괄호로 묶어서 하나의 토큰으로 사용
regex:
/abcd/ : abcd를 포함하는가
/abcd$/ : abcd로 끝나야한다
/^\abcd/ : \으로 특수기호 처리, abcd로 시작해야함
array
['/abcd','xyz'], 배열 안의 경로를 사용
- 라우터
const userRouter = express.Router();
userRouter.param("id", (req, res, next, value))
: userRouter에 파라미터로 들어온 값은 4번째 인수로 전해진다, 얘도 미들웨어
bodyParser
- req의 body를 parsing해준다
- bodyparser.json()등 원하는 형태로 받을 수 있다
- 요즘에는 express.json 사용, express 자체적으로 지원
템플릿 엔진 PUG
- npm i pug
- mime 타입?
- req.accept([]) : req로 들어온 데이터가 어떤 형식인지 확인하고 알맞은 값을 리턴
static 파일 서빙
- app.use(express.static("src/public"))
: 위쪽에 위치할 경우에 만약 주소값과 내부 파일 경로가 일치할 경우, 파일이 다운로드 된다
: 해결책 1, 밑으로 옮긴다
: 해결책 2, app.use("/public", express.static("src/public")),
prefix를 주어서 /public이 들어갈때만 실행 -> localhost:5000/public/users/15 이런식으로 하면 전처럼 파일이 다운된다
에러 헨들링
- try / catch ?
- throw new Error('하고 싶은 말') || 에러 객체를 생성, statusCode를 설정후 붙여서 throw
- 미들웨어로 처리가능
: app.use((err,req,res,next)=>{})
: 여기서 throw된 에러 객체를 받을 수 있고, err.statusCode로 res.statusCode 수정
: 4개의 인자를 받는 경우에만 에러 핸들링 미들웨어로 취급
- async로 할경우 try/catch로 해야 함, promise 핸들링이 안돼서 터짐
: next()에 인자를 넣어주면 에러가 된다
API testing
- jest
: app.spec.js 등 중간에 spec을 넣어서 파일을 생성
: expect().toBe() 등으로 조건?과 결과값을 넣는다
: package.json에 scripts에 "test":"jest" 추가
: jest에선 함수를 다 async로 만들 수 있다(await붙히기 쌉가능)
- supertest
- import/export 안되는 문제
: .babelrc 만들고
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-modules-commonjs"]
}
}
} 쓴다
: npm i @babel/plugin-transform-modules-commonjs 한다
- export default는 import로 받아야하고, module.exports는 require로 받아야 작동한다
- [ERR_MODULE_NOT_FOUND]는 확장자를 안써서 생기는 경우
이미지 업로드
- form에서 enctype="multpart-data"로 설정
- npm i multer 설치, 데이터를 파싱해준다