How can I set response header on express.js assets

Javascriptnode.jsExpress

Javascript Problem Overview


I need to set CORS to be enabled on scripts served by express. How can I set the headers in these returned responses for public/assets?

Javascript Solutions


Solution 1 - Javascript

There is at least one middleware on npm for handling CORS in Express: cors. [see @mscdex answer]

This is how to set custom response headers, from the ExpressJS DOC

res.set(field, [value])

Set header field to value

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

or pass an object to set multiple fields at once.

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

Aliased as

res.header(field, [value])

Solution 2 - Javascript

This is so annoying.

Okay if anyone is still having issues or just doesn't want to add another library. All you have to do is place this middle ware line of code before your routes.

>Cors Example

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

Solution 3 - Javascript

You can do this by using cors. cors will handle your CORS response

var cors = require('cors')

app.use(cors());

Solution 4 - Javascript

Short Answer:

  • res.setHeaders - calls the native Node.js method

  • res.set - sets headers

  • res.headers - an alias to res.set

Solution 5 - Javascript

@klode's answer is right.

However, you are supposed to set another response header to make your header accessible to others.


Example:

First, you add 'page-size' in response header

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

Then, all you need to do is expose your header

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

Solution 6 - Javascript

There is at least one middleware on npm for handling CORS in Express: cors.

Solution 7 - Javascript

You can also add a middleware to add CORS headers, something like this would work:

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

Solution 8 - Javascript

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

Solution 9 - Javascript

First add 'field' in response header

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

Then you need to do is expose your header

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDr.KnowitallView Question on Stackoverflow
Solution 1 - JavascriptklodeView Answer on Stackoverflow
Solution 2 - JavascriptProximoView Answer on Stackoverflow
Solution 3 - JavascriptRahul SolankiView Answer on Stackoverflow
Solution 4 - JavascriptCharlieView Answer on Stackoverflow
Solution 5 - JavascriptkpanodreanView Answer on Stackoverflow
Solution 6 - JavascriptmscdexView Answer on Stackoverflow
Solution 7 - JavascriptmagikMakerView Answer on Stackoverflow
Solution 8 - JavascriptThitikan ChoeibamrungView Answer on Stackoverflow
Solution 9 - JavascriptguinogueirasView Answer on Stackoverflow