Search code examples
javascriptnode.jsexpressnode.js-connect

How to configure the Express response object to automatically add attributes to JSON?


I have an object:

var obj = { "stuff": "stuff" }

In Express, I send it the client like so:

res.json(obj);

Is there a way to configure the response object to automatically add attributes to the json it generates? For example, to output:

{
  "status": "ok",
  "data": { "stuff": "stuff" }
}

Thanks!


Solution

  • Once the data has been added to the stream, that's too late to rewrap it, so you have to do it before.

    Either simply with a function:

    res.json(wrap(obj));
    

    You could also add your own json method

    express.response.wrap_json = function(obj) {
      this.json(wrap(obj));
    };
    

    so you can now call

    res.wrap_json(obj);
    

    Or you could replace express json implementation with yours

    var original = express.response.json;
    express.response.json = function(obj) {
      original.call(this, wrap(obj));
    };
    

    I would only use the last one if you want to override all json calls.