This library is inspired by the REST APIS Best practices & the Fractal library.
Use Case: API Response Formatter
** NOTE ** This is a work in Progress
const express = require('app')
const datran = require('datran')
let app = express()
app.get('/user', async function(req, res) {
let resource = datran.item(await User.find(1))
let data = await datran.create(resource, new UserTransformer()).toObject()
res.status(200).json(data)
})
const { Transformer } = require('datran')
const UserTransformer = Transformer.create({
async transform(user) {
return {
id: user.get('_id'),
full_name: user.get('fullName')
}
}
})
or
const { Transformer } = require('datran')
class UserTransformer extends Transformer {
async transform(user) {
return {
// formatted user data
}
}
}
- Specify an
availableIncludes
array in the transformer and and optionaldefaultIncludes
array. - Implement an
include{EmbeddedResource}
in the transformer, which should call a separate Transformer.
class CommentTransformer extends Transformer {
async transform(comment) {
return {
//formatted comments
}
}
}
class UserTransformer extends Transformer {
get availableIncludes() {
return ['comments']
}
get defaultIncludes() {
return ['comments']
}
async transform(user) {
return {
// formatted user data
}
}
includeComments(user) {
if (user.comments)
return this.collection(user.comments, new CommentTransformer())
}
}
When creating the datran resource, create an options object with a fields
array, containing the resources to embed.
const opts = {
fields: ['comments']
}
app.get('/user', async function(req, res) {
const user = await User.find(1).populate('comments') //a user with a "comments" array
let resource = datran.item(user, opts)
let data = await datran.create(resource, new UserTransformer()).toObject()
res.status(200).json(data)
})
TODO Docs
TODO Docs
TODO Docs