it-swarm.com.de

Wie kann ich den Antwortheader für express.js-Assets festlegen?

Ich muss CORS so einstellen, dass es für Skripte aktiviert wird, die von express bereitgestellt werden. Wie kann ich die Kopfzeilen in diesen zurückgegebenen Antworten für öffentliche/Vermögenswerte setzen?

113
Dr.Knowitall

Bei npm gibt es mindestens eine Middleware für den Umgang mit CORS in Express: cors . [siehe @mscdex Antwort]

So legen Sie benutzerdefinierte Antwortheader über ExpressJS DOC fest

res.set(field, [value])

Setzen Sie das Headerfeld auf value

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

oder übergeben Sie ein Objekt, um mehrere Felder gleichzeitig festzulegen.

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

Alias ​​as 

res.header(field, [value])
268
klode

Das ist so nervig. 

Okay, wenn jemand noch Probleme hat oder einfach keine weitere Bibliothek hinzufügen möchte. Alles, was Sie tun müssen, ist, diese mittlere Codezeile vor Ihren Routen zu platzieren. 

Cors Beispiel

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

Bei npm gibt es mindestens eine Middleware für den Umgang mit CORS in Express: cors .

7
mscdex

Sie können dies mit Cors tun. cors wird Ihre CORS-Antwort bearbeiten

var cors = require('cors')

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

@ klode's Antwort ist richtig.

Sie sollten jedoch einen anderen Antwortheader festlegen, um Ihren Header für andere Benutzer zugänglich zu machen.


Beispiel:

Zuerst fügen Sie im Antwortheader "Seitengröße" hinzu

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

Dann müssen Sie nur noch den Header anzeigen

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

Sie können auch eine Middleware hinzufügen, um CORS-Header hinzuzufügen. Dies würde beispielsweise folgendermaßen funktionieren:

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

Kurze Antwort:  

res.setHeaders - ruft die native Node-Methode auf

res.set - Setzt Header

res.headers - ein Alias ​​für das res.set

0
Charlie H