express-reply
v1.0.2
Published
send the best http response determined by http accept header.
Downloads
1
Readme
#Express reply
express-reply is express middleware that enables you to easily send the correct response type, based on the Accept http header. It also adds extensions for sending replies in express for both xml and yaml.
#Installation
npm i express-reply
#Quick use
const express = require('express'),
app = express(),
expressReply = require('express-reply');
app.use(expressReply());
#Example usage
app.get('/products/:id',function(req,res,next){
const id = req.param('id');
db.find({_id:id},function(err,product){
if(err) return next(err);
/*
Send view via res.render(), if accept header is 'text/html' or other derivative mimetype
else if 'application/xml' or derivative mime type, send xml
else if 'text/x-yaml' or derivative mime type, send yaml
if no view engine is set up, or extension on the provided view doesn't match one of the view engines
use or .sendFile();
//Uses res.sendFile(), object parameter will be send file options.
e.g res.expressReponse('myfile.csv',{});
*/
else res.expressResponse('products',product);
});
})
#Other utility methods added
res.xml({
this:'js object',
willBeSent:'as Xml'
name:'Foo',
age:1
});
//Specify the root node name when sending xml
res.xml({hi:1},'RootNodeName');
res.yaml({
this:'js object',
willBeSent:'as Xml'
name:'Foo',
age:1
})
#Advanced usage
app.use(expressResponse({
/*Sets the parent node name when an xml response is set, defaults to Node*/
xmlRootNode:'ImAtTheTop',
/*Set the content type sent by yaml, defaults to application/x-yaml;*/
yamlContentType:'text/x-yaml'
/*Set the content type sent by yaml, defaults to application/xml;*/
xmlContentType:'xml',
/**
* Register custom response types
*/
responseTypes:{
/**
* req: the current request
* res: the current response
* view: the view specified when calling res.expressResponse()
* e.g when res.expressResponse('products',product)
* the view would be 'products'
* object: the data specified when calling res.expressResponse()
* e.g when res.expressResponse('products',product)
* the data would be product
* */
'someReponseType':function(req, res, view, object) {
return res.xml(object);
}
}
}))