File: platform/classes/Q/Request.js
/**
* @module Q
*/
var Q = require('../Q');
/**
* @class Request
* @namespace Q
*/
var Request = {};
/**
* Method for getting the app's canonical baseUrl from the config.
* Note that this may not match the baseUrl for all PHP requests.
*/
Request.baseUrl = function () {
return Q.Config.expect(['Q', 'web', 'appRootUrl'])
+ Q.Config.get(['Q', 'web', 'controllerSuffix'], '');
};
/**
* Use this to determine what method to treat the request as.
* @method method
* @param {http.Request} req
* @return {string} Returns an uppercase string such as "GET", "POST", "PUT", "DELETE"
* See [Request methods](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods)
*/
Request.method = function (req) {
var parts = require('url').parse(req.url, true);
if (parts.query && parts.query["Q.method"]) {
return parts.query["Q.method"].toUpperCase();
}
if (!req.method) {
return 'GET';
}
return req.method.toUpperCase();
};
/**
* The names of slots that were requested, if any
* @method slotNames
* @param {http.Request} req
* @param {boolean} [returnDefaults=false]If set to true, returns the array of slot names set in config field
* named Q/response/$app/slotNames in the event that slotNames was not specified at all in the request.
* @return {array}
*/
Request.slotNames = function(req, returnDefaults) {
var parts = require('url').parse(req.url, true);
if (!parts.query || !parts.query["Q.slotNames"]) {
if (!returnDefaults) {
return null;
}
var app = Q.Config.expect(['Q', 'app']);
return Q.Config.get(
['Q', 'response', 'slotNames'],
['content', 'dashboard', 'title', 'notices']
);
}
var slotNames = parts.query["Q.slotNames"];
if (typeof slotNames === 'string') {
var result = [];
var snp = slotNames.split(',');
for (var i=0; i<snp.length; ++i) {
result.push(snp[i]);
}
slotNames = result;
}
if (!slotNames || !slotNames.length) {
return [];
}
return slotNames;
}
module.exports = Request;