Как сделать код более плоским (промисы)?
client.getAsync('data')
	.then((data) => {
		if (data)
			return [data.count, data.articles, true];

		return [Article.count({}),
			Article.find({}, '-_id title content slug')
				.sort({_id: -1})
				.limit(limit)
				.skip((page - 1) * limit),
			false]
	})
	.spread((count, articles, fromCache) => {
		if (!fromCache) {
			return new Promise((resolve, reject) => {
				client.set('data', JSON.stringify({count, articles}), "EX", 20, (error) => {
					if (error)
						return reject(error);

					return resolve([count, articles]);
				});
			});
		}

		return [count, articles];
	})
	.spread((count, articles) => {
		return res.status(200)
			.json({
				count,
				articles
			})
	})
	.catch((err) => {
		return next(err);
	});
Тоже не очень, нужно разделение кода, вынести в репозитории, которые будут управлять кешем и тогда код в контроллерах будет красивше, ну и саму запись в кеш изначально сделать на промисах, тогда можно будет придумать что-то еще. spread из bluebird
if (data) {
        return res.status(200).json(JSON.parse(data))
      } else {
...
}
Блок else можно опустить -- выигрыш в 1 уровень вложенности