Code Monkey home page Code Monkey logo

response's Introduction

Copyright

The quick fix (issues and vulnerabilities) for clone of https://github.com/mikeal/response by contributers. For stable version, I suggest use version by Mikeal

Quick Example

response.json({result:'error',missing_keys:['email']}).status(400).pipe(res)

// headers are { 'content-type': 'application/json',
// date: 'Mon, 12 May 2014 12:57:31 GMT',
// connection: 'keep-alive',
// 'transfer-encoding': 'chunked' } 
// statusCode is 400 
// body is { result: 'error', missing_keys: [ 'email' ] }

Response

The basic idea is to build request for HTTP Responses.

This whole package is still beta.

files

var server = http.createServer(function (req, res) {
  var f = fs.createReadStream('file.js')
  if (req.url === '/test.js') return f.pipe(response()).pipe(res)
})

When pipeing files to response it will lookup the mime type and set the propert content-type header for whatever file extension you send it.

html, json, txt

var server = http.createServer(function (req, res) {
  if (req.url === '/') return response.html('<html>Hello World</html>').pipe(res)
  if (req.url === '/sitemap.html') {
    var f = fs.createReadStream('sitemap')
    return f.pipe(response.html()).pipe(res)
  }
  if (req.url === '/something.json') return response.json({test:1}).pipe(res)
  if (req.url === '/something.txt') return response.txt('some test').pipe(res)
})

.error(err[, statusCode])

r.error(new Error('Uh Oh!')).pipe(res)
r.error(555).pipe(res)
r.error(new Error('Uh Oh!'), 501).pipe(res)

In addition, errors emitted on the stream piped to response will be passed through the same API and are accesssible in views.

gzip and deflate compression

The compress and gzip keys in an options object are used for compression.

var server = http.createServer(function (req, res) {
  var f = fs.createReadStream('file.js')
  if (req.url === '/file.js') return f.pipe(response({compress:req})).pipe(res)
})

You can pass an HTTP Request object and the best compression, if any, will be chosen for you. Alternatively you can pass "gzip" or "deflate" to forcce compression of the response stream.

This compression option is compatible with every other feature in response and will work whether you do file streaming, html, json, or even using views. When passing a view, string or buffer to response the second argument is used as the options object.

var server = http.createServer(function (req, res) {
  if (req.url === '/') return response.html('<html>Nope</html>', {compress:req}).pipe(res)
})

status codes and headers

response also has an extended version of node core's HTTP Response API.

All headers setting and checking is done caseless while preserving the original casing when first set. This way you never accidentally send two of the same header but can still support broken clients that check for specific caseing.

.statusCode

Set the statusCode property to send the HTTP status code. This is a non-destructive way to send the status code.

var r = response()
r.statusCode = 500
r.html('<html>Error</html>')

.setHeader(key, value[, clobber=true])

Defaults to clobbering (overwritting) existing values but when disabled will concatenate values.

r.setHeader('X-Blah', 'somehost.com')

.setHeader(headers)

Set multiple headers by passing an object.

r.setHeader({'x-blah': 'somehost', 'x-blah2': 'anotherhost.com'})

.getHeader(key)

You can retreive a header by its key, use this method instead of directly accessing the headers object to avoid caseing constraints.

r.getHeader('content-type')

.hasHeader(key)

Check if a header is already set. If one is set the header key will be returned (which is important because it may have different caseing).

r.hasHeader('content-type')

views (very experimental)

function view (e, data, cb) {
  if (e) return cb(e)
  cb(null, '<html>' + data + '</html>')
}

var server = http.createServer(function (req, res) {
  var r = response(view)
  r.pipe(res)
  if (req.url === '/test1') return r.html('test')
})

This is how you would easily support something like a template system. TODO: example.

Credits

Mad props to @marak who handed over the "response" package in npm that he registered way back in the day.

response's People

Contributors

mikeal avatar rook2pawn avatar micksatana avatar hubdotcom avatar chiendv avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.