Join egghead, unlock knowledge.

Want more egghead?

This lesson is for members. Join us? Get access to all 3,000+ tutorials + a community with expert developers around the world.

Unlock This Lesson
Become a member
to unlock all features

Level Up!

Access all courses & lessons on egghead today and lock-in your price for life.


    hapi.js - Using the response object

    Mike FreyMike Frey

    Think of hapi's reply() function as "what you want to say" and the response object as "how you want to say it". While reply controls the payload sent to the client, the response object will allow you to control how the client interprets the payload by manipulating status code, content type, state and more.



    Become a Member to view code

    You must be a Member to view code

    Access all courses and lessons, track your progress, gain confidence and expertise.

    Become a Member
    and unlock code for this lesson




    When a route's reply method is called with anything but an error, it returns a response object. This response object has a few properties like status code and headers, but in the context of a route handler, they are not very useful because the status and headers can't be changed by modifying the properties.

    Instead, response object provides a number of functions for mutating the response before it gets sent back to the client. Let's take a look at a few of them. HAPI defaults to the status code of 200 for a normal reply, but the code method lets you change the status code of the response. I'll change it to 418, then make a request, and you can see that it is set appropriately.

    HAPI also tries to detect the MIME type of a response by default, but sometimes it needs a little help. I'm sending plain text, but HAPI is defaulting it to a MIME type of text HTML. I can use the type method to change it to text plain, and now the content header reflects text plain.

    I can set other headers using the header method. The first argument is the header name, and the second is the value. I'll set the header hello with a value of world, and the header shows up when I make a request.

    I could set cookies with the header method, too, but there is a method called state that is specific to setting cookies. Like header, the first argument is the key, and the second is the value. I'll repeat the hello world theme once again, and the set cookie header shows up in the response.

    The last thing I want to mention is that the response object is chainable, so I can make this a bit more concise by removing the references to RESP, and the route responds the same way as before.