비동기 작업도 자동으로 error 미들웨어로 던지려면?
import "express-async-errors" 이 라이브러리를 받고,import 만해주면 Promise를 반환하는 미들웨어의 에러를 error 미들웨어로 넘깁니다. async 함수로 작성된것은 그냥두면 되지만 promise 로 작성된 비동기작업은 반드시 그 promise를 return 해주어야합니다.
callback은 처리안해줘도 잡아지는 거같음.
import express from "express";
import fs from "fs";
import "express-async-errors";
const app = express();
app.use(express.json());
// 동기작업 에러 처리
app.get("/file1", (req, res, next) => {
const data = fs.readFileSync("./file1.txt");
});
// 비동기작업 에러 처리 (callback)
app.get("/file2", (req, res, next) => {
// callback형태의 비동기작업은 err가 callback으로 넘어가기 때문에, 외부에서 에러가 던져지지 않는다. callback 내에서 처리해 주어야한다.
fs.readFile("./file2.txt");
});
// 비동기작업 에러 처리 (promise)
app.get("/file3", (req, res, next) => {
return fs.promises.readFile("./file3").then((data) => {
res.status(200).send(data);
});
});
// 비동기작업 에러 처리 (promise to next)
app.get("/file4", (req, res, next) => {
return fs.promises.readFile("./file4");
});
// 비동기작업 에러 처리 (async)
app.get("/file5", async (req, res, next) => {
const data = await fs.promises.readFile("./file5");
});
// 미들웨어에서 에러가 발생하면 모두 여기로 넘어온다.(미들웨어 내에서 에러처리를 하지 않을때)
app.use((error, req, res, next) => {
console.log("error");
res.send({ message: "만능 error 발생!" });
});
app.listen(8080);
반응형
'Archive' 카테고리의 다른 글
[5] express.json() vs express.urlencoded() 차이 (0) | 2022.04.03 |
---|---|
[4] express route로 chaining & Router로 모듈화 (0) | 2022.04.03 |
[2] express 에러 핸들링 (0) | 2022.04.03 |
[1] express 요청,응답,미들웨어 (0) | 2022.04.03 |
[22] Restful API 에 대해서 (0) | 2022.04.03 |