인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김영기님의 프로필 이미지

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

Git 와 GitHub 사용하기

10강 cors에러 localhost:4000으로 접속했을때 에러

작성

·

30

·

수정됨

1

에러캡쳐.png.webp

에러로 의심되는 코드 올릴게요.아래는 nodebird-api 의 routes/index 파일과 middlewares/index.js코드의 corsWhenDomainMaches 모듈인데 뭐가문제인지 모르겠습니다. cors모듈은 사용했는데 말이죠


module.exports = router;            
exports.corsWhenDomainMatches = async (req, res, next) => {
  const domain = await Domain.findOne({
    where: { host: new URL(req.get('origin')).host },
  });
  if (domain) {
    cors({ 
      origin: req.get('origin'),
      credentials: true,
    })(req, res, next);
  } else {
    next();
  }
};                 
const express = require('express');
const { verifyToken, apiLimiter, corsWhenDomainMatches } = require('../middlewares');
const { createToken, tokenTest, getMyPosts, getPostsByHashtag } = require('../controllers/v2');

const router = express.Router();

router.use(corsWhenDomainMatches);

// POST /v2/token
router.post('/token', apiLimiter, createToken);

// POST /v2/test
router.get('/test', apiLimiter, verifyToken, tokenTest);

// GET /v2/posts/my
router.get('/posts/my', apiLimiter, verifyToken, getMyPosts);

// GET /v2/posts/hashtag/:title
router.get('/posts/hashtag/:title', apiLimiter, verifyToken, getPostsByHashtag);

답변 2

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

백엔드 서버 콘솔에서 나오는 에러가 있나요? 그리고 domain과 req.get('origin')을 console.log 찍어보세요.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 김영기님이 직면한 문제는 CORS 설정 과정에서 발생하는 오류로 보입니다. 이를 해결하기 위한 몇 가지 요점을 정리해 드리겠습니다.

CORS(Cross-Origin Resource Sharing) 문제는 클라이언트-서버 간 도메인이 다를 때 발생하는 보안 정책 문제로서, 서버 측에서 올바른 CORS 정책을 설정해야 합니다. 자세한 설정 및 오류 메시지를 확인 후 적용해 보시기 바랍니다.

  1. CORS 문제 해결을 위한 기본 점검:

    • 요청하는 클라이언트의 도메인과 포트가 서버의 CORS 설정에서 허용되고 있는지 확인하세요. corsWhenDomainMatches 함수에서 req.get('origin')을 사용하고 있는데, origin 값이 정확한지 로그로 확인해 보세요.
    • Domain.findOne()으로 찾는 도메인이 데이터베이스에 있는지 확인하세요. 도메인 데이터가 없다면 CORS 설정이 작동하지 않을 것입니다.
  2. 코드 변경 제안:

    • CORS 설정을 좀 더 명확하게 하기 위해서 모든 요청에 대해 CORS를 적용해 보는 것도 한 방법입니다. 만약 여전히 문제가 발생한다면, CORS 설정 위치를 코드에서 더욱 명확히 지정해 보세요. 예를 들어, cors() 사용 전 도메인을 정확히 확인하거나 credentials 옵션을 다시 검토하세요.
  3. 로깅 및 디버깅:

    • 이 문제를 해결하기 위해서는 서버의 로그에서 CORS 관련 요청의 헤더들이 올바르게 보내지고 있는지 확인하는 것이 중요합니다. console.log를 사용하여 req.get('origin') 값이 예상 대로인지 반드시 체크하세요.
  4. 해결 사례를 참고해 보세요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.