core/server/services/routing/helpers/fetch-data.js
/**
 * ## Fetch Data
 * Calls out to get posts per page, builds the final posts query & builds any additional queries
 * Wraps the queries using Promise.props to ensure it gets named responses
 * Does a first round of formatting on the response, and returns
 */
Fetch Data
Calls out to get posts per page, builds the final posts query & builds any additional queries
Wraps the queries using Promise.props to ensure it gets named responses
Does a first round of formatting on the response, and returns
Fetch Data Calls out to get posts per page builds the final posts query & builds any additional queries Wraps the queries using Promise . props to ensure it gets named responses Does a first round of formatting on the response and returns
function fetchData(pathOptions, routerOptions) {
    pathOptions = pathOptions || {};
    routerOptions = routerOptions || {};
    let postQuery = _.cloneDeep(defaultPostQuery),
        props = {};
    if (routerOptions.filter) {
        postQuery.options.filter = routerOptions.filter;
    }
    if (pathOptions.hasOwnProperty('page')) {
        postQuery.options.page = pathOptions.page;
    }
    if (pathOptions.hasOwnProperty('limit')) {
        postQuery.options.limit = pathOptions.limit;
    }
    props.posts = processQuery(postQuery, pathOptions.slug);
    _.each(routerOptions.data, function (query, name) {
        props[name] = processQuery(query, pathOptions.slug);
    });
    return Promise.props(props)
        .then(function formatResponse(results) {
            const response = _.cloneDeep(results.posts);
            delete results.posts;
            if (!routerOptions.data && routerOptions.identifier) {
                response.posts = _.filter(response.posts, (post) => {
                    if (urlService.owns(routerOptions.identifier, post.url)) {
                        return post;
                    }
                });
            }
            if (!_.isEmpty(results)) {
                response.data = {};
                _.each(results, function (result, name) {
                    if (routerOptions.data[name].type === 'browse') {
                        response.data[name] = result;
                    } else {
                        response.data[name] = result[routerOptions.data[name].resource];
                    }
                });
            }
            return response;
        });
}
function fetchData ( pathOptions , routerOptions ) { pathOptions = pathOptions || { } ; routerOptions = routerOptions || { } ; let postQuery = _ . cloneDeep ( defaultPostQuery ) , props = { } ; if ( routerOptions . filter ) { postQuery . options . filter = routerOptions . filter ; } if ( pathOptions . hasOwnProperty ( 'page' ) ) { postQuery . options . page = pathOptions . page ; } if ( pathOptions . hasOwnProperty ( 'limit' ) ) { postQuery . options . limit = pathOptions . limit ; } props . posts = processQuery ( postQuery , pathOptions . slug ) ; _ . each ( routerOptions . data , function ( query , name ) { props [ name ] = processQuery ( query , pathOptions . slug ) ; } ) ; return Promise . props ( props ) . then ( function formatResponse ( results ) { const response = _ . cloneDeep ( results . posts ) ; delete results . posts ; if ( ! routerOptions . data && routerOptions . identifier ) { response . posts = _ . filter ( response . posts , ( post ) => { if ( urlService . owns ( routerOptions . identifier , post . url ) ) { return post ; } } ) ; } if ( ! _ . isEmpty ( results ) ) { response . data = { } ; _ . each ( results , function ( result , name ) { if ( routerOptions . data [ name ] . type === 'browse' ) { response . data [ name ] = result ; } else { response . data [ name ] = result [ routerOptions . data [ name ] . resource ] ; } } ) ; } return response ; } ) ; }
## Fetch Data
 Calls out to get posts per page, builds the final posts query & builds any additional queries
 Wraps the queries using Promise.props to ensure it gets named responses
 Does a first round of formatting on the response, and returns
## Fetch Data Calls out to get posts per page builds the final posts query & builds any additional queries Wraps the queries using Promise . props to ensure it gets named responses Does a first round of formatting on the response and returns
// CASE: always fetch post collection // The filter can in theory contain a "%s" e.g. filter="primary_tag:%s" // CASE: fetch more data defined by the router e.g. tags, authors - see TaxonomyRouter // CASE: does this post belong to this collection? // EXCEPTION: Taxonomies always list the posts which belong to a tag/author. // process any remaining data