簡體   English   中英

如何在 express.js 資產上設置響應 header

[英]How can I set response header on express.js assets

我需要設置 CORS 以在 express 提供的腳本上啟用。 如何在這些返回的公共/資產響應中設置標頭?

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])

這太煩人了。

好的,如果有人仍然有問題或者只是不想添加另一個庫。 你所要做的就是在你的路由之前放置這行中間件代碼。

Cors 示例

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

您可以通過使用 cors 來做到這一點。 cors 將處理您的 CORS 響應

var cors = require('cors')

app.use(cors());

簡答:

  • res.setHeaders - 調用原生 Node.js 方法

  • res.set - 設置標題

  • res.headers - res.headers的別名

npm 上至少有一個中間件用於處理 Express 中的 CORS: cors

@klode 的回答是對的。

但是,您應該設置另一個響應標頭,以使其他人可以訪問您的標頭。


例子:

首先,您在響應標頭中添加“頁面大小”

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

然后,您需要做的就是公開您的標頭

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

您還可以添加一個中間件來添加 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();
    }
};

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

首先在響應頭中添加“字段”

response.set('field', 'value');

然后你需要做的是暴露你的標題

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

使用最新版本的 express.js 4.18.2:

如果您正在使用static中間件,並且想要更改響應 header,您應該:

app.use(express.static('./', {
  setHeaders: function(res) {
    res.set("Content-Security-Policy", "default-src 'self'");
  }
}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM