node-res

5.0.1 • Public • Published

Node Res

A facade over Node.js HTTP res object with no side-effects.

NPM Version Build Status Appveyor Coveralls

node-res is a simple module to make HTTP response in Node.js. It offers helpers to make it easier to set headers, define response statuses and properly parse response type to set appropriate headers.

For example:

// content-type: plain/text
nodeRes.send(req, res, 'Hello world')
 
// content-type: application/json
nodeRes.send(req, res, { greeting: 'hello world' })
    
// content-type: text/html
nodeRes.send(req, res, '<h2> Hello world </h2>')

See also

  1. node-req
  2. node-cookie

Basic Example

const http = require('http')
const nodeRes = require('node-res')
 
http.createServer(function (req, res) {
  
  // plain text
  nodeRes.send(req, res, "Hello world")
 
  // json
  nodeRes.json(req, res, {time:"now"})
 
  // jsonp
  nodeRes.jsonp(req, res, {time:"now"}, "callback")
 
}).listen(3000)
 

API

Response

A simple IO module to make consistent HTTP response, without worrying about underlying details.

Response~getHeader(res, key) ⇒ Array | String

Returns the value of an existing header on the response object

Kind: inner method of Response
Returns: Array | String - Return type depends upon the header existing value

Param Type
res ServerResponse
key String

Example

nodeRes.getHeader(res, 'Content-type')

Response~header(res, key, value) ⇒ void

Sets header on the response object. This method will wipe off existing values. To append to existing values, use append.

Kind: inner method of Response

Param Type
res http.ServerResponse
key String
value String | Array

Example

nodeRes.header(res, 'Content-type', 'application/json')
 
// or set an array of headers
nodeRes.header(res, 'Link', ['<http://localhost/>', '<http://localhost:3000/>'])

Response~append(res, key, value) ⇒ void

Appends value to the header existing values.

Kind: inner method of Response

Param Type
res http.ServerResponse
key String
value String | Array

Example

nodeRes.append(res, 'Content-type', 'application/json')
 
// or append an array of headers
nodeRes.append(res, 'Link', ['<http://localhost/>', '<http://localhost:3000/>'])

Response~status(res, code) ⇒ void

Set status on the HTTP res object

Kind: inner method of Response

Param Type
res http.ServerResponse
code Number

Example

nodeRes.status(res, 200)

Response~safeHeader(res, key, value) ⇒ void

Sets the header on response object, only if it does not exists.

Kind: inner method of Response

Param Type
res http.ServerResponse
key String
value String | Array

Example

nodeRes.safeHeader(res, 'Content-type', 'application/json')

Response~removeHeader(res, key) ⇒ void

Removes the header from response

Kind: inner method of Response

Param Type
res http.ServerResponse
key String

Example

nodeRes.removeHeader(res, 'Content-type')

Response~write(res, body) ⇒ void

Write string or buffer to the response object.

Kind: inner method of Response

Param Type
res http.ServerResponse
body String | Buffer

Example

nodeRes.write(res, 'Hello world')

Response~end(res, [payload]) ⇒ void

Explictly end HTTP response

Kind: inner method of Response

Param Type
res http.ServerResponse
[payload] String | Buffer

Example

nodeRes.end(res, 'Hello world')

Response~send(req, res, body, [generateEtag]) ⇒ void

Send body as the HTTP response and end it. Also this method will set the appropriate Content-type and Content-length.

If body is set to null, this method will end the response as 204.

Kind: inner method of Response

Param Type Default
req http.ServerRequest
res http.ServerResponse
body String | Buffer | Object | Stream
[generateEtag] Boolean true

Example

nodeRes.send(req, res, 'Hello world')
 
// or html
nodeRes.send(req, res, '<h2> Hello world </h2>')
 
// or JSON
nodeRes.send(req, res, { greeting: 'Hello world' })
 
// or Buffer
nodeRes.send(req, res, Buffer.from('Hello world', 'utf-8'))
 
// Ignore etag
nodeRes.send(req, res, 'Hello world', false)

Response~etag(res, body) ⇒ void

Sets the Etag header for a given body chunk

Kind: inner method of Response

Param Type
res http.ServerResponse
body String | Buffer

Example

nodeRes.etag(res, 'Hello world')

Response~prepare(res, body) ⇒ String

Prepares the response body by encoding it properly. Also sets appropriate headers based upon the body content type.

This method is used internally by send, so you should never use it when calling send.

It is helpful when you want to get the final payload and end the response at a later stage.

Kind: inner method of Response

Param Type
res http.ServerResponse
body Mixed

Example

const chunk = nodeRes.prepare(res, '<h2> Hello </h2>')
 
if (chunk) {
  nodeRes.etag(res, chunk)
 
  if (nodeReq.fresh(req, res)) {
    chunk = null
    nodeRes.status(304)
  }
 
  nodeRes.end(chunk)
}

Response~prepareJsonp(res, body, callbackFn) ⇒ String

Prepares response for JSONP

Kind: inner method of Response

Param Type
res http.ServerResponse
body Object
callbackFn String

Example

const chunk = nodeRes.prepareJsonp(res, '<h2> Hello </h2>', 'callback')
 
if (chunk) {
  nodeRes.etag(res, chunk)
 
  if (nodeReq.fresh(req, res)) {
    chunk = null
    nodeRes.status(304)
  }
 
  nodeRes.end(chunk)
}

Response~json(req, res, body, [generateEtag]) ⇒ void

Returns the HTTP response with Content-type set to application/json.

Kind: inner method of Response

Param Type Default
req http.IncomingMessage
res http.ServerResponse
body Object
[generateEtag] Boolean true

Example

nodeRes.json(req, res, { name: 'virk' })
nodeRes.json(req, res, [ 'virk', 'joe' ])

Response~jsonp(req, res, body, [callbackFn], [generateEtag]) ⇒ void

Make JSONP response with Content-type set to text/javascript.

Kind: inner method of Response

Param Type Default
req http.IncomingMessage
res http.ServerResponse
body Object
[callbackFn] String 'callback'
[generateEtag] Boolean true

Example

nodeRes.jsonp(req, res, { name: 'virk' }, 'callback')

Response~location(res, url) ⇒ void

Set Location header on the HTTP response.

Kind: inner method of Response

Param Type
res http.ServerResponse
url String

Response~redirect(req, res, url, [status]) ⇒ void

Redirect the HTTP request to the given url.

Kind: inner method of Response

Param Type Default
req http.IncomingMessage
res http.ServerResponse
url String
[status] Number 302

Example

nodeRes.redirect(req, res, '/')

Response~vary(res, field) ⇒ void

Add vary header to the HTTP response.

Kind: inner method of Response

Param Type
res http.ServerResponse
field String

Response~type(req, res, [charset]) ⇒ void

Set content type header by looking up the actual type and setting charset to utf8.

Note

When defining custom charset, you must set pass the complete content type, otherwise false will be set as the content-type header.

Kind: inner method of Response

Param Type
req http.IncomingMessage
res http.ServerResponse
[charset] String

Example

nodeRes.type(res, 'html')
 
nodeRes.type(res, 'json')
 
nodeRes.type(res, 'text/html', 'ascii')

Response~stream(res, body) ⇒ Promise

Pipe stream to the response. Also this method will make sure to destroy the stream, if request gets cancelled.

The promise resolve when response finishes and rejects, when stream raises errors.

Kind: inner method of Response

Param Type
res Object
body Stream

Example

Response.stream(res, fs.createReadStream('foo.txt'))
 
// handle stream errors
Response
  .stream(res, fs.createReadStream('foo.txt'))
  .catch((error) => {
  })

Package Sidebar

Install

npm i node-res

Weekly Downloads

229,454

Version

5.0.1

License

MIT

Unpacked Size

34.8 kB

Total Files

5

Last publish

Collaborators

  • amanvirk
  • virk