如何在express.js资产上设置响应头

Dr.*_*all 141 javascript node.js express

我需要在快递服务的脚本上设置CORS.如何在公共/资产的这些返回响应中设置标头?

klo*_*ode 317

npm中至少有一个中间件用于处理Express:cors中的 CORS .[见@mscdex答案]

这是从ExpressJS DOC设置自定义响应标头的方法

res.set(field, [value])
Run Code Online (Sandbox Code Playgroud)

将标题字段设置为值

res.set('Content-Type', 'text/plain');
Run Code Online (Sandbox Code Playgroud)

或传递一个对象一次设置多个字段.

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

别名为

res.header(field, [value])
Run Code Online (Sandbox Code Playgroud)

  • 我怎样才能得到这些值?因为我在 `res` 对象中设置了这些值。当我尝试查看此内容时,我使用 `res.headers` 未定义; (2认同)

Pro*_*imo 32

这太烦人了.

好的,如果有人仍然有问题或者只是不想添加另一个库.您所要做的就是在您的路线之前放置这个中间件代码行.

科尔斯的例子

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)=> {...});
Run Code Online (Sandbox Code Playgroud)

  • 不错:完美解决了问题。添加整个依赖项来执行这 6 行代码并不是我向任何人推荐的方法...... (3认同)
  • 这一点相对于订单来说很重要。我想知道这是否真的很重要,因为我在更改它时看到了不同的行为。好的。谢谢 (2认同)

kpa*_*ean 10

@klode 的回答是对的。

但是,您应该设置另一个响应标头,以使其他人可以访问您的标头。


例子:

首先,您在响应标头中添加“页面大小”

response.set('page-size', 20);
Run Code Online (Sandbox Code Playgroud)

然后,您需要做的就是公开您的标头

response.set('Access-Control-Expose-Headers', 'page-size')
Run Code Online (Sandbox Code Playgroud)

  • 我发现如何阅读文档: ```javascript Access-Control-Expose-Headers: * // 或 Access-Control-Expose-Headers: <header-name>, <header-name>, ... ``` (3认同)
  • 如果你有 2 个标题怎么办?像这样: ```javascript res.set("...","..."); res.set("...","...."); `` 现在如何公开这两个标头? (2认同)

msc*_*dex 9

npm中至少有一个中间件用于处理Express:cors中的 CORS .


小智 8

你可以用cors来做到这一点.cors将处理您的CORS响应

var cors = require('cors')

app.use(cors());
Run Code Online (Sandbox Code Playgroud)


小智 7

首先在响应头中添加“字段”

response.set('field', 'value');
Run Code Online (Sandbox Code Playgroud)

然后你需要做的就是公开你的标题

response.set('Access-Control-Expose-Headers', 'field')
Run Code Online (Sandbox Code Playgroud)


mag*_*ker 6

您还可以添加中间件来添加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();
    }
};
Run Code Online (Sandbox Code Playgroud)


Cha*_*lie 5

简短答案:

res.setHeaders-调用本地Node方法

res.set-设置标题

res.headers - res.set的别名


小智 5

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();
  });
Run Code Online (Sandbox Code Playgroud)