we-core
Version:
We.js is a node.js framework for build real time applications, sites or blogs!
96 lines (84 loc) • 2.97 kB
JavaScript
/**
* We.js core response formats
*/
var _ = require('lodash');
module.exports = {
/**
* Html response type, rende one page with layout, regions and widgets
*
* If req.query.contentOnly is set only render the page content
*
* @param {Object} data
* @param {Object} req Express.js request
* @param {Object} res Express.js response
* @return {String} html page
*/
html: function htmlFormater(req, res) {
if (req.query.contentOnly) {
res.send(req.we.view.renderTemplate(res.locals.template, res.locals.theme, res.locals));
} else {
res.send(res.renderPage(req, res, res.locals.data));
}
},
/**
* JSON response format
*
* @param {Object} data
* @param {Object} req Express.js request
* @param {Object} res Express.js response
* @return {Object} JS object to send with res.send
*/
json: function jsonFormater(req, res) {
if (!res.locals.data) res.locals.data = {};
if (!res.locals.model) {
// set messages
res.locals.data.messages = res.locals.messages;
return res.send(res.locals.data);
}
var response = {};
if (req.we.config.sendNestedModels) {
response[res.locals.model] = res.locals.data;
} else {
response[res.locals.model] = parseRecord(req, res, res.locals.data);
}
// check field privacity access
req.we.db.checkRecordsPrivacity(res.locals.data);
response.meta = res.locals.metadata;
if (!_.isEmpty( res.locals.messages) ) {
// set messages
response.messages = res.locals.messages;
}
res.send(response);
}
};
/**
* Parse one record associations for JSON format to change association model object to association model id
*
* @param {Object} req Express.js request
* @param {Object} res Express.js response
* @param {Obejct} record Record to parse
* @return {Object} returns the parsed record
*/
function parseRecord(req, res, record) {
for (var associationName in res.locals.Model.associations) {
if (!record[associationName]) {
if ( record.dataValues[ associationName + 'Id' ] ) {
record.dataValues[ associationName ] = record[ associationName + 'Id' ];
}
} else {
if (record.dataValues[ associationName + 'Id' ]) {
record.dataValues[ associationName ] = record[ associationName + 'Id' ];
} else if ( _.isObject(record[ associationName ] && record[ associationName ].id) ) {
record.dataValues[ associationName ] = record[ associationName ].id;
// if is a NxN association
} else if( req.we.utils.isNNAssoc ( record[ associationName ] ) ) {
record.dataValues[ associationName ] = record[ associationName ].id;
} else {
for (var i = record.dataValues[ associationName ].length - 1; i >= 0; i--) {
record.dataValues[ associationName ][i] = record.dataValues[ associationName ][i].id;
}
}
}
}
return record;
}