express.js 자산에 응답 헤더를 설정하는 방법


164

express가 제공하는 스크립트에서 CORS를 사용하도록 설정해야합니다. 공개 / 자산에 대한 이러한 반환 된 응답에서 헤더를 설정하려면 어떻게해야합니까?

답변:


358

npm에는 Express에서 CORS를 처리하기위한 미들웨어가 하나 이상 있습니다 : cors . [@mscdex 답변 참조]

ExpressJS DOC 에서 사용자 정의 응답 헤더를 설정하는 방법입니다.

res.set(field, [value])

헤더 필드를 값으로 설정

res.set('Content-Type', 'text/plain');

또는 한 번에 여러 필드를 설정하려면 개체를 전달하십시오.

res.set({
  'Content-Type': 'text/plain',
  'Content-Length': '123',
  'ETag': '12345'
})

로 별칭

res.header(field, [value])

이 값들을 어떻게 얻을 수 있습니까? 이 값을 res객체에 설정했기 때문 입니다. 이 내용을 보려고 할 때 res.headers;
Bruno Casali

그런 다음 사용 res.write('content')합니까?
George

1
이 줄은 머리글을 쓰기 전에 사용해야합니다.
Virendra Singh Rathore

어떤 이유로 든 res.set나를 위해 작동하지 않았지만 cors미들웨어가 트릭을 올바르게 수행했습니다.
Cezar D.

@BrunoCasali 추가 헤더는 기본적으로 브라우저에 의해 차단됩니다. stackoverflow.com/a/37931084/1507207
sbk201

48

너무 짜증나.

여전히 문제가 있거나 다른 라이브러리를 추가하지 않으려는 경우 좋습니다. 이 미들웨어 코드를 경로 앞에두기 만하면됩니다.

코르 예

app.use((req, res, next) => {
    res.append('Access-Control-Allow-Origin', ['*']);
    res.append('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.append('Access-Control-Allow-Headers', 'Content-Type');
    next();
});

// Express routes
app.get('/api/examples', (req, res)=> {...});

1
이 점은 주문과 관련하여 중요합니다. 나는 그것을 바꿀 때 다른 행동을 보았을 때 정말로 중요한지 궁금했습니다. 좋은. 감사합니다
Alejandro Teixeira Muñoz

1
니스 : 문제를 완벽하게 해결했습니다. 이 6 줄의 코드를 수행하기 위해 전체 의존성을 추가하는 것은 내가 권장하지 않는 길입니다 ...
Alex Clark

11

cors를 사용하여이를 수행 할 수 있습니다. cors는 CORS 응답을 처리합니다.

var cors = require('cors')

app.use(cors());

10

짧은 답변:

  • res.setHeaders -네이티브 Node.js 메소드를 호출

  • res.set -헤더를 설정

  • res.headers -res.set에 대한 별명


9

npm에는 Express에서 CORS를 처리하기위한 미들웨어가 하나 이상 있습니다 : cors .


7

CORS 헤더를 추가하기 위해 미들웨어를 추가 할 수도 있습니다.

/**
 * Adds CORS headers to the response
 *
 * {@link https://en.wikipedia.org/wiki/Cross-origin_resource_sharing}
 * {@link http://expressjs.com/en/4x/api.html#res.set}
 * @param {object} request the Request object
 * @param {object} response the Response object
 * @param {function} next function to continue execution
 * @returns {void}
 * @example
 * <code>
 * const express = require('express');
 * const corsHeaders = require('./middleware/cors-headers');
 *
 * const app = express();
 * app.use(corsHeaders);
 * </code>
 */
module.exports = (request, response, next) => {
    // http://expressjs.com/en/4x/api.html#res.set
    response.set({
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'DELETE,GET,PATCH,POST,PUT',
        'Access-Control-Allow-Headers': 'Content-Type,Authorization'
    });

    // intercept OPTIONS method
    if(request.method === 'OPTIONS') {
        response.send(200);
    } else {
        next();
    }
};

4

service.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
    next();
  });


3

@klode의 대답이 옳습니다.

그러나 다른 사용자가 헤더에 액세스 할 수 있도록 다른 응답 헤더를 설정해야합니다.


예:

먼저 응답 헤더에 'page-size'를 추가하십시오.

response.set('page-size', 20);

그런 다음 헤더를 노출하기 만하면됩니다.

response.set('Access-Control-Expose-Headers', 'page-size')

왜 내 사용자 지정 헤더가 다른 쪽 끝에서 그것을 만들지 않았는지 알아 내려고 노력하면서 한 시간 이상 갇혀있었습니다. 그것들을 드러내는 것이 답이었습니다. 정말 고맙습니다! 이 문서가 Express 문서에서 언급되지 않은 이유 (또는 지금까지 사용자 정의 헤더에 대해 읽은 기사)가 매우 수수께끼입니다.
Devin Spikowski

헤더가 2 개인 경우 어떻게합니까? 이처럼 : javascript res.set("...","..."); res.set("...","...."); 이제 두 헤더를 어떻게 노출합니까?
커서

문서를 읽는 방법을 발견했습니다.javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
커서
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.