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

Javascript 如何在express.js资产上设置响应头,javascript,node.js,express,Javascript,Node.js,Express,我需要在express提供的脚本上启用CORS。如何在这些返回的公共/资产响应中设置标题?npm上至少有一个中间件用于处理Express中的COR:。[见@mscdex答案] 这是如何从 将标题字段设置为值 res.set('Content-Type', 'text/plain'); 或传递一个对象以同时设置多个字段 res.set({ 'Content-Type': 'text/plain', 'Content-Length': '123', 'ETag': '12345' })

我需要在express提供的脚本上启用CORS。如何在这些返回的公共/资产响应中设置标题?

npm上至少有一个中间件用于处理Express中的COR:。[见@mscdex答案]

这是如何从

将标题字段设置为值

res.set('Content-Type', 'text/plain');
或传递一个对象以同时设置多个字段

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

res.header(field, [value])

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

您可以通过使用CORS来实现这一点。cors将处理您的cors响应

var cors = require('cors')

app.use(cors());

@克洛德的答案是正确的

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


例如:

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

response.set('page-size', 20);
response.set('field', 'value');
然后,你需要做的就是暴露你的头

response.set('Access-Control-Expose-Headers', 'page-size')
response.set('Access-Control-Expose-Headers', 'field')
这太烦人了

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

Cors示例


您还可以添加一个中间件来添加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();
    }
};

简短回答:

  • res.setHeaders
    -调用native Node.js方法

  • res.set
    -设置标题

  • res.headers
    -res.set的别名

service.use(函数(req、res、next){
res.header(“访问控制允许原点”、“*”);
res.header(“访问控制允许方法”、“GET、HEAD、OPTIONS、POST、PUT”);
res.header(“访问控制允许标头”、“来源、X请求、内容类型、接受、授权”);
next();

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

response.set('page-size', 20);
response.set('field', 'value');
然后你需要做的就是暴露你的头

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

如何获取这些值?因为我在
res
对象中设置了这些值。当我试图查看此内容时,我使用
res.headers
进行了未定义;然后我使用
res.write('content')
?这一行应该在写标题之前使用。由于某种原因
res.set
对我不起作用,但是
cors
中间件做得很好。@BrunoCasali额外的标题默认情况下被浏览器阻止,看,我被困了一个多小时,试图弄明白为什么我的自定义头都没有到达另一端。答案就是揭露他们。非常感谢你!为什么这个标题在Express文档(或者我到目前为止读过的任何关于自定义标题的文章)中都没有提及,这是非常令人费解的。如果你有两个标题呢?像这样:
javascript res.set(“…”,“…”);res.set(“…”,“…”)现在如何公开这两个标题?我发现如何阅读文档:
javascript访问控制公开标题:///或访问控制公开标题:此点相对于订单的重要性。我想知道这是否真的很重要,因为我在改变它时看到了不同的行为。美好的谢谢你,完美地解决了这个问题。添加一个完整的依赖项来执行这6行代码并不是我推荐给任何人的道路。。。