web-dev-qa-db-ja.com

express.jsアセットにレスポンスヘッダーを設定する方法

Expressが提供するスクリプトでCORSを有効にする必要があります。パブリック/アセット用にこれらの返されたレスポンスにヘッダーを設定する方法を教えてください。

126
Dr.Knowitall

ExpressでCORSを処理するためのnpm上のミドルウェアが少なくとも1つあります。 cors 。 [@mscdex answerを参照してください]

これは 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])
285
klode

これはとても面倒です。

だれかがまだ問題を抱えているか、単に別のライブラリを追加したくない場合は、問題ありません。あなたがしなければならないのはあなたのルートの前にこのミドルウェアコード行を置くことだけです。

コルの例

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)=> {...});
25
Proximo

ExpressでCORSを処理するためのnpm上のミドルウェアが少なくとも1つあります。 cors

8
mscdex

これを行うには、コアを使用します。 CORSはあなたのCORS応答を処理します

var cors = require('cors')

app.use(cors());
6
Rahul Solanki

@ klodeの答えは正しいです。

ただし、自分のヘッダーを他のユーザーがアクセスできるようにするには、別の応答ヘッダーを設定する必要があります。


例:

まず、レスポンスヘッダに 'page-size'を追加します

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

そして、あなたがする必要があるのはあなたのヘッダを公開することだけです。

response.set('Access-Control-Expose-Headers', 'page-size')
2
kpanodrean
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();
  });

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();
    }
};
1
magikMaker

短い答え:

res.setHeaders - ネイティブNodeメソッドを呼び出します

res.set - ヘッダを設定します

res.headers - res.setのエイリアス

0
Charlie H