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

혁진님의 프로필 이미지
혁진

작성한 질문수

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

CORS 이해하기

질문

작성

·

246

0

9분7초에 나온대로

  res.setHeader('Access-Control-Allow-Origin', 'localhost:4000');
  res.setHeader('Access-Control-Allow-Credentials', 'true');
 
를 추가했는데도 cors 가 해결되지 않습니다.
 
버전문제인걸까요?

답변 6

0

혁진님의 프로필 이미지
혁진
질문자

늦은밤에도 빠른 답변 감사합니다.

편안한 밤 되세요 선생님.

0

혁진님의 프로필 이미지
혁진
질문자

수업중 9분07 에 나온곳과 동일하게 위치시켰습니다.

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

강의 중 cors 모듈 쓰기 전 잠깐 간략하게 언급한 부분이군요. 저 위치에 저렇게 코딩하면 안 되고, router.post 위에 다음 추가해야 합니다.

router.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:4000');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Vary', 'Origin');
res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.setHeader('Access-Control-Allow-Headers', 'content-type');
next();
})


0

혁진님의 프로필 이미지
혁진
질문자

const express = require('express');
const jwt = require('jsonwebtoken');
const cors = require('cors');
const url = require('url');

const { verifyToken, apiLimiter } = require('./middlewares');
const { Domain, User, Post, Hashtag } = require('../models');

const router = express.Router();

router.post('/token', apiLimiter, async (req, res) => {
  const { clientSecret } = req.body;
  try {
    const domain = await Domain.findOne({
      where: { clientSecret },
      include: {
        model: User,
        attribute: ['nick', 'id'],
      },
    });
    if (!domain) {
      return res.status(401).json({
        code: 401,
        message: '등록되지 않은 도메인입니다. 먼저 도메인을 등록하세요',
      });
    }
    const token = jwt.sign({
      id: domain.User.id,
      nick: domain.User.nick,
    }, process.env.JWT_SECRET, {
      expiresIn: '30m', // 30분
      issuer: 'nodebird',
    });

    res.setHeader('Access-Control-Allow-Origin', 'localhost:4000');
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    return res.json({
      code: 200,
      message: '토큰이 발급되었습니다',
      token,
    });
  } catch (error) {
    console.error(error);
    return res.status(500).json({
      code: 500,
      message: '서버 에러',
    });
  }
});

router.get('/test', verifyToken, apiLimiter, (req, res) => {
  res.json(req.decoded);
});

router.get('/posts/my', apiLimiter, verifyToken, (req, res) => {
  Post.findAll({ where: { userId: req.decoded.id } })
    .then((posts) => {
      console.log(posts);
      res.json({
        code: 200,
        payload: posts,
      });
    })
    .catch((error) => {
      console.error(error);
      return res.status(500).json({
        code: 500,
        message: '서버 에러',
      });
    });
});

router.get('/posts/hashtag/:title', verifyToken, apiLimiter, async (req, res) => {
  try {
    const hashtag = await Hashtag.findOne({ where: { title: req.params.title } });
    if (!hashtag) {
      return res.status(404).json({
        code: 404,
        message: '검색 결과가 없습니다',
      });
    }
    const posts = await hashtag.getPosts();
    return res.json({
      code: 200,
      payload: posts,
    });
  } catch (error) {
    console.error(error);
    return res.status(500).json({
      code: 500,
      message: '서버 에러',
    });
  }
});

module.exports = router;

0

혁진님의 프로필 이미지
혁진
질문자

localhost:4000에서 GET '/' 요청을 보냈을 때 입니다.

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

헤더가 없는 것을 보니 엉뚱한 데 코드가 위치한 것 같은데요?

0

혁진님의 프로필 이미지
혁진
질문자

0

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

네트워크탭 헤더들을 봐야합니다. cors에는 버전 문제가 없습니다.

혁진님의 프로필 이미지
혁진

작성한 질문수

질문하기