inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

app.use()와 프로미스 인스턴스의 우선순위

해결된 질문

152

이승훈

작성한 질문수 49

0

 안녕하세요 조현영님 오랜만에 질문올립니다.

제가 모종의 이유로 인해 app.use()를 프로미스 객체를 반환하는 함수랑 같이 쓰기 위해서 다음과 같은 코드를 만들었습니다.


(async () => {
    try {
        const result = await getNum();

        process.nextTick(() => {
            app.use("/product/product1", product1Router);
            app.use("/product/product2", product2Router);
            app.use("/product/product3", product3Router);
        });
    } catch (err) {
        console.error(err.message);
    }
})();

 일단 app.use("/product/...")를 async/await 구문안에 넣지 않거나 const result = await getNum() 위에 선언하여 사용하면 해당 경로에 get요청을 보낼시 페이지가 잘 나오게 됩니다. 허나  const result = await getNum() 밑에 선언하게 되면 페이지와 콘솔에 제가 만들어 놓았던 404 처리 미들웨어가 실행되며 에러를 뿜습니다 (경로가 인식이 안되는 거 같습니다).

 await getNum()의 처리가 늦어져서 밑에 있던 app.use()가 실행이 안되는게 아닐까 생각하며 조현영님께서 process.nextTick()을 사용하면 프로미스 객체보다 실행 우선순위를 빠르게 점유 할수 있다는 말씀을 듣고 app.use()를 process.nextTick()으로 감싸버렸습니다. 그런데 프로미스는 비동기 처리이니까 getNum()의 처리가 아무리 늦어져도 밑에 있는 app.use()가 실행이 되어야하는거 아닐까요? 만약에 product1Router역시 async/await으로 감싸져 있다면 문제가 될까요? 혹시 모르니 product1Router 코드도 보여드리겠습니다. (product2Router, product3Router역시 형태는 product1Router와 같습니다.)

const express = require("express");
const axios = require("axios");
const router = express.Router();
const showPage = require("../modules/showPage");

router.route("/").get(async (req, res) => {
    try {
        const result = await axios.get("http://127.0.0.1:3257");
        const productID = String(result.data[0].id);

        showPage(productID, res);
        console.log("Request Type:", req.method);
    } catch (err) {
        console.error(err);
    }
});

module.exports = router;

product1Router역시 async/await으로 감싸져서 process.nextTick()의 효과를 못 받는건가요? 그게 아니라면 어떤 문제가 있을까요? 굳이 process.nextTick()을 이용해서 코드를 짤 필요는 없으니 어떤 이유 때문에 const result = await getNum() 아래에 app.use()를 사용하면 실행이 안되는지 궁금합니다.

mongodb nodejs mysql Sequelize

답변 1

0

제로초(조현영)

app.use는 비동기적으로 호출할 수 없습니다. process.nextTick이나 await 모두 비동기라서 안 됩니다.

리눅스 노드 설치시 패키지

0

172

0

socket.js 에서 referer로부터 roomId를 가져올 때

0

926

3

스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문

0

2297

2

a[title] 질문드립니다

0

386

1

리뉴얼 강의 및 공부 방법

0

589

1

jwt decode

0

1138

1

node.js 교과서 3판 질문드립니다

0

396

1

passport와 jwt

0

438

1

리뉴얼 강의

0

428

2

혹시 Node.js 교과서 3판 이북은 언제 나오나요?

0

359

1

몽고디비 사용자도 MYSQL부분을 들어야 하나요???

0

488

1

sql 쿼리 로그는 어떤 모듈이 작성하나요?

0

511

2

nunjucks res.render('error'); 작동을 안합니다.

0

518

1

질문있습니다.

0

348

1

multer 한글 파일 업로드시 파일명이 깨져요.

1

3543

1

수업자료는 어디있나요?

0

374

1

질문 있습니디

0

244

1

multer 사용시 file 외 name값은 못받나용?

0

430

1

코드 중복 부분 질문드립니다.

0

303

1

api 만드는 이유 질문드립니다.

0

293

1

Strategy의 done에 대해 질문드립니다.

0

373

1

안녕하세요 fs 권한 관련 질문드립니다

0

456

1

시퀄라이즈 연결질문...

0

510

2

res.setHeader vs res.cookie

0

1797

3