Jak ustawić nagłówek odpowiedzi w zasobach express.js.


164

Muszę ustawić CORS, aby był włączony w skryptach obsługiwanych przez Express. Jak mogę ustawić nagłówki w tych zwróconych odpowiedziach dla publicznych / zasobów?

Odpowiedzi:


358

Na npm istnieje co najmniej jedno oprogramowanie pośredniczące do obsługi CORS w Express: cors . [patrz odpowiedź @mscdex]

Oto jak ustawić niestandardowe nagłówki odpowiedzi z pliku DOC ExpressJS

res.set(field, [value])

Ustaw pole nagłówka na wartość

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

lub przekazać obiekt, aby ustawić wiele pól jednocześnie.

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

Z aliasem

res.header(field, [value])

Jak mogę uzyskać te wartości? Ponieważ ustawiłem te wartości w resobiekcie. Kiedy próbuję zobaczyć tę zawartość, nieokreślony używając res.headers;
Bruno Casali

Wtedy używam res.write('content')?
George,

1
Tej linii należy użyć przed napisaniem głowy.
Virendra Singh Rathore

Z jakiegoś powodu res.setnie działało dla mnie, ale corsoprogramowanie pośredniczące zrobiło to dobrze.
Cezar D.

Dodatkowe nagłówki @BrunoCasali są domyślnie blokowane przez przeglądarkę, patrz stackoverflow.com/a/37931084/1507207
sbk201

48

To jest takie irytujące.

OK, jeśli ktoś nadal ma problemy lub po prostu nie chce dodawać kolejnej biblioteki. Wszystko, co musisz zrobić, to umieścić tę środkową linię kodu przed trasami.

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

1
Ważny ten punkt w odniesieniu do zamówienia. Zastanawiałem się, czy to naprawdę ważne, ponieważ widziałem różne zachowania podczas zmiany. Miły. Dzięki
Alejandro Teixeira Muñoz

1
Fajnie: doskonale rozwiązał problem. Dodanie całej zależności w celu wykonania tych 6 linii kodu nie jest drogą, którą polecałbym każdemu ...
Alex Clark

11

Możesz to zrobić za pomocą cors. cors zajmie się twoją odpowiedzią CORS

var cors = require('cors')

app.use(cors());

10

Krótka odpowiedź:

  • res.setHeaders - wywołuje natywną metodę Node.js.

  • res.set - ustawia nagłówki

  • res.headers - alias do res.set


9

Na npm istnieje co najmniej jedno oprogramowanie pośredniczące do obsługi CORS w Express: cors .


7

Możesz również dodać oprogramowanie pośredniczące, aby dodać nagłówki CORS, coś takiego zadziała:

/**
 * 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

Odpowiedź @ klode jest prawidłowa.

Jednak powinieneś ustawić inny nagłówek odpowiedzi, aby twój nagłówek był dostępny dla innych.


Przykład:

Najpierw dodajesz „rozmiar strony” w nagłówku odpowiedzi

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

Następnie wszystko, co musisz zrobić, to ujawnić swój nagłówek

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

Utknąłem przez ponad godzinę, próbując zrozumieć, dlaczego żaden z moich niestandardowych nagłówków nie dotarł na drugi koniec. Odpowiedzią było ich ujawnienie. Dziękuję bardzo! Dlaczego ten nagłówek nie ma wzmianki w dokumentach Express (lub w jakichkolwiek artykułach, które przeczytałem do tej pory na temat niestandardowych nagłówków), jest bardzo zagadkowe.
Devin Spikowski

A co by było, gdybyś miał 2 nagłówki? W ten sposób: javascript res.set("...","..."); res.set("...","...."); Jak teraz ujawnić te 2 nagłówki?
Kursor

Odkryłem, jak czytam dokumenty:javascript Access-Control-Expose-Headers: * // or Access-Control-Expose-Headers: <header-name>, <header-name>, ...
Kursor
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.