refactor all boot to export func and use loopback
This commit is contained in:
@ -79,6 +79,7 @@
|
||||
"passport-twitter": "~1.0.2",
|
||||
"ramda": "~0.10.0",
|
||||
"request": "~2.53.0",
|
||||
"rx": "^2.5.3",
|
||||
"sanitize-html": "~1.6.1",
|
||||
"sitemap": "~0.7.4",
|
||||
"twit": "~1.1.20",
|
||||
|
@ -1,9 +1,11 @@
|
||||
var R = require('ramda'),
|
||||
express = require('express'),
|
||||
// Rx = require('rx'),
|
||||
// debug = require('debug')('freecc:fieldguides'),
|
||||
resources = require('../resources/resources');
|
||||
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var FieldGuide = app.models.FieldGuide;
|
||||
|
||||
router.get('/field-guide/all-articles', showAllFieldGuides);
|
||||
router.get('/field-guide/:fieldGuideName', returnIndividualFieldGuide);
|
||||
@ -23,9 +25,12 @@ function returnIndividualFieldGuide(req, res, next) {
|
||||
});
|
||||
req.user.uncompletedFieldGuides = uncompletedFieldGuides;
|
||||
// TODO(berks): handle callback properly
|
||||
req.user.save();
|
||||
req.user.save(function(err) {
|
||||
if (err) { return next(err); }
|
||||
});
|
||||
}
|
||||
|
||||
// NOTE(berks): loopback might have issue with regex here.
|
||||
FieldGuide.find(
|
||||
{ dashedName: new RegExp(dashedName, 'i') },
|
||||
function(err, fieldGuideFromMongo) {
|
||||
@ -118,5 +123,4 @@ function completedFieldGuide(req, res, next) {
|
||||
res.send(true);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
var message =
|
||||
'Learn to Code JavaScript and get a Coding Job by Helping Nonprofits';
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
router.get('/', index);
|
||||
|
||||
function index(req, res, next) {
|
||||
@ -18,5 +18,4 @@ function index(req, res, next) {
|
||||
res.render('home', { title: message });
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,20 +1,23 @@
|
||||
var express = require('express'),
|
||||
Nonprofit = require('../../common/models/Nonprofit');
|
||||
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var Nonprofit = app.models.Nonprofit;
|
||||
|
||||
router.get('/nonprofits/directory', nonprofitsDirectory);
|
||||
router.get('/nonprofits/:nonprofitName', returnIndividualNonprofit);
|
||||
|
||||
function nonprofitsDirectory(req, res, next) {
|
||||
Nonprofit.find({ estimatedHours: { $gt: 0 } }, function(err, nonprofits) {
|
||||
Nonprofit.find(
|
||||
{ where: { estimatedHours: { $gt: 0 } } },
|
||||
function(err, nonprofits) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
res.render('nonprofits/directory', {
|
||||
title: 'Nonprofits we help',
|
||||
nonprofits: nonprofits
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function returnIndividualNonprofit(req, res, next) {
|
||||
@ -22,7 +25,7 @@ function returnIndividualNonprofit(req, res, next) {
|
||||
var nonprofitName = dashedName.replace(/\-/g, ' ');
|
||||
|
||||
Nonprofit.find(
|
||||
{ name: new RegExp(nonprofitName, 'i') },
|
||||
{ where: { name: new RegExp(nonprofitName, 'i') } },
|
||||
function(err, nonprofit) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
@ -122,5 +125,4 @@ function interestedInNonprofit(req, res, next) {
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
var express = require('express'),
|
||||
passport = require('passport'),
|
||||
var passport = require('passport'),
|
||||
passportConf = require('../../config/passport');
|
||||
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var passportOptions = {
|
||||
successRedirect: '/',
|
||||
failureRedirect: '/login'
|
||||
@ -64,5 +64,4 @@ router.get(
|
||||
res.redirect(req.session.returnTo || '/');
|
||||
}
|
||||
);
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
|
||||
router.get('/nonprofit-project-instructions', function(req, res) {
|
||||
res.redirect(
|
||||
@ -41,7 +41,8 @@ router.get('/nodeschool-challenges', function(req, res) {
|
||||
});
|
||||
|
||||
router.get('/privacy', function(req, res) {
|
||||
res.redirect(301, '/field-guide/what-is-the-free-code-camp-privacy-policy?');
|
||||
res.redirect(
|
||||
301, '/field-guide/what-is-the-free-code-camp-privacy-policy?'
|
||||
);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,16 +1,16 @@
|
||||
var nodemailer = require('nodemailer'),
|
||||
sanitizeHtml = require('sanitize-html'),
|
||||
express = require('express'),
|
||||
moment = require('moment'),
|
||||
mongodb = require('mongodb'),
|
||||
// debug = require('debug')('freecc:cntr:story'),
|
||||
Story = require('../../common/models/Story'),
|
||||
Comment = require('../../common/models/Comment'),
|
||||
User = require('../../common/models/User'),
|
||||
resources = require('../resources/resources'),
|
||||
MongoClient = mongodb.MongoClient,
|
||||
secrets = require('../../config/secrets'),
|
||||
router = express.Router();
|
||||
secrets = require('../../config/secrets');
|
||||
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var User = app.models.User;
|
||||
var Story = app.models.Story;
|
||||
|
||||
router.get('/stories/hotStories', hotJSON);
|
||||
router.get('/stories/recentStories', recentJSON);
|
||||
@ -39,7 +39,6 @@ function hotRank(timeValue, rank) {
|
||||
var z = Math.log(rank) / Math.log(10);
|
||||
hotness = z + (timeValue / time48Hours);
|
||||
return hotness;
|
||||
|
||||
}
|
||||
|
||||
function hotJSON(req, res, next) {
|
||||
@ -252,9 +251,12 @@ function upvote(req, res, next) {
|
||||
story.markModified('rank');
|
||||
story.save();
|
||||
// NOTE(Berks): This logic is full of wholes and race conditions
|
||||
// this could be the source of many 'can't set headers after they are sent'
|
||||
// this could be the source of many 'can't set headers after
|
||||
// they are sent'
|
||||
// errors. This needs cleaning
|
||||
User.findOne({'_id': story.author.userId}, function(err, user) {
|
||||
User.findOne(
|
||||
{ where: { id: story.author.userId } },
|
||||
function(err, user) {
|
||||
if (err) { return next(err); }
|
||||
|
||||
user.progressTimestamps.push(Date.now() || 0);
|
||||
@ -267,14 +269,17 @@ function upvote(req, res, next) {
|
||||
return next(err);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
return res.send(story);
|
||||
});
|
||||
}
|
||||
|
||||
function comments(req, res, next) {
|
||||
var data = req.params.id;
|
||||
Comment.find({'_id': data}, function(err, comment) {
|
||||
Comment.find(
|
||||
{ where: {'_id': data } },
|
||||
function(err, comment) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
@ -305,7 +310,9 @@ function newStory(req, res, next) {
|
||||
if (url.search(/^https?:\/\//g) === -1) {
|
||||
url = 'http://' + url;
|
||||
}
|
||||
Story.find({'link': url}, function(err, story) {
|
||||
Story.find(
|
||||
{ where: {'link': url} },
|
||||
function(err, story) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
@ -319,7 +326,8 @@ function newStory(req, res, next) {
|
||||
});
|
||||
}
|
||||
resources.getURLTitle(url, processResponse);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
function processResponse(err, story) {
|
||||
if (err) {
|
||||
@ -360,7 +368,7 @@ function storySubmission(req, res, next) {
|
||||
}
|
||||
|
||||
Story.count({
|
||||
storyLink: new RegExp('^' + storyLink + '(?: [0-9]+)?$', 'i')
|
||||
storyLink: { like: new RegExp('^' + storyLink + '(?: [0-9]+)?$', 'i') }
|
||||
}, function (err, storyCount) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
@ -461,17 +469,21 @@ function commentOnCommentSubmit(req, res, next) {
|
||||
return next(new Error('Not authorized'));
|
||||
}
|
||||
|
||||
var sanitizedBody = sanitizeHtml(data.body,
|
||||
var sanitizedBody = sanitizeHtml(
|
||||
data.body,
|
||||
{
|
||||
allowedTags: [],
|
||||
allowedAttributes: []
|
||||
}).replace(/"/g, '"');
|
||||
}
|
||||
).replace(/"/g, '"');
|
||||
|
||||
if (data.body !== sanitizedBody) {
|
||||
req.flash('errors', {
|
||||
msg: 'HTML is not allowed'
|
||||
});
|
||||
return res.send(true);
|
||||
}
|
||||
|
||||
var comment = new Comment({
|
||||
associatedPost: data.associatedPost,
|
||||
body: sanitizedBody,
|
||||
@ -494,7 +506,7 @@ function commentOnCommentSubmit(req, res, next) {
|
||||
|
||||
function commentEdit(req, res, next) {
|
||||
|
||||
Comment.find({'_id': req.params.id}, function(err, cmt) {
|
||||
Comment.find({ id: req.params.id }, function(err, cmt) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
@ -504,7 +516,6 @@ function commentEdit(req, res, next) {
|
||||
return next(new Error('Not authorized'));
|
||||
}
|
||||
|
||||
|
||||
var sanitizedBody = sanitizeHtml(req.body.body, {
|
||||
allowedTags: [],
|
||||
allowedAttributes: []
|
||||
@ -538,7 +549,7 @@ function commentSave(comment, Context, res, next) {
|
||||
// Based on the context retrieve the parent
|
||||
// object of the comment (Story/Comment)
|
||||
Context.find({
|
||||
'_id': data.associatedPost
|
||||
id: data.associatedPost
|
||||
}, function (err, associatedContext) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
@ -605,5 +616,4 @@ function commentSave(comment, Context, res, next) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -5,14 +5,15 @@ var _ = require('lodash'),
|
||||
nodemailer = require('nodemailer'),
|
||||
passport = require('passport'),
|
||||
moment = require('moment'),
|
||||
express = require('express'),
|
||||
debug = require('debug')('freecc:cntr:userController'),
|
||||
|
||||
User = require('../../common/models/User'),
|
||||
secrets = require('../../config/secrets'),
|
||||
resources = require('./../resources/resources');
|
||||
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var User = app.models.User;
|
||||
|
||||
router.get('/login', function(req, res) {
|
||||
res.redirect(301, '/signin');
|
||||
});
|
||||
@ -325,8 +326,8 @@ function returnUser (req, res, next) {
|
||||
}
|
||||
if (user[0]) {
|
||||
user = user[0];
|
||||
|
||||
user.progressTimestamps = user.progressTimestamps.sort(function(a, b) {
|
||||
user.progressTimestamps =
|
||||
user.progressTimestamps.sort(function(a, b) {
|
||||
return a - b;
|
||||
});
|
||||
|
||||
@ -486,29 +487,34 @@ function postUpdateProfile (req, res, next) {
|
||||
});
|
||||
return res.redirect('/account');
|
||||
}
|
||||
user.email = req.body.email.trim() || '';
|
||||
user.profile.name = req.body.name.trim() || '';
|
||||
user.profile.username = req.body.username.trim() || '';
|
||||
user.profile.location = req.body.location.trim() || '';
|
||||
user.profile.githubProfile = req.body.githubProfile.trim() || '';
|
||||
user.profile.facebookProfile = req.body.facebookProfile.trim() || '';
|
||||
user.profile.linkedinProfile = req.body.linkedinProfile.trim() || '';
|
||||
user.profile.codepenProfile = req.body.codepenProfile.trim() || '';
|
||||
user.profile.twitterHandle = req.body.twitterHandle.trim() || '';
|
||||
user.profile.bio = req.body.bio.trim() || '';
|
||||
var body = req.body || {};
|
||||
user.email = body.email.trim() || '';
|
||||
user.profile.name = body.name.trim() || '';
|
||||
user.profile.username = body.username.trim() || '';
|
||||
user.profile.location = body.location.trim() || '';
|
||||
|
||||
user.profile.picture = req.body.picture.trim() ||
|
||||
user.profile.githubProfile = body.githubProfile.trim() || '';
|
||||
user.profile.facebookProfile = body.facebookProfile.trim() || '';
|
||||
user.profile.linkedinProfile = body.linkedinProfile.trim() || '';
|
||||
|
||||
user.profile.codepenProfile = body.codepenProfile.trim() || '';
|
||||
user.profile.twitterHandle = body.twitterHandle.trim() || '';
|
||||
user.profile.bio = body.bio.trim() || '';
|
||||
|
||||
user.profile.picture = body.picture.trim() ||
|
||||
'https://s3.amazonaws.com/freecodecamp/' +
|
||||
'camper-image-placeholder.png';
|
||||
user.portfolio.website1Title = req.body.website1Title.trim() || '';
|
||||
user.portfolio.website1Link = req.body.website1Link.trim() || '';
|
||||
user.portfolio.website1Image = req.body.website1Image.trim() || '';
|
||||
user.portfolio.website2Title = req.body.website2Title.trim() || '';
|
||||
user.portfolio.website2Link = req.body.website2Link.trim() || '';
|
||||
user.portfolio.website2Image = req.body.website2Image.trim() || '';
|
||||
user.portfolio.website3Title = req.body.website3Title.trim() || '';
|
||||
user.portfolio.website3Link = req.body.website3Link.trim() || '';
|
||||
user.portfolio.website3Image = req.body.website3Image.trim() || '';
|
||||
user.portfolio.website1Title = body.website1Title.trim() || '';
|
||||
user.portfolio.website1Link = body.website1Link.trim() || '';
|
||||
user.portfolio.website1Image = body.website1Image.trim() || '';
|
||||
|
||||
user.portfolio.website2Title = body.website2Title.trim() || '';
|
||||
user.portfolio.website2Link = body.website2Link.trim() || '';
|
||||
user.portfolio.website2Image = body.website2Image.trim() || '';
|
||||
|
||||
user.portfolio.website3Title = body.website3Title.trim() || '';
|
||||
user.portfolio.website3Link = body.website3Link.trim() || '';
|
||||
user.portfolio.website3Image = body.website3Image.trim() || '';
|
||||
|
||||
|
||||
user.save(function (err) {
|
||||
@ -540,7 +546,9 @@ function postUpdateProfile (req, res, next) {
|
||||
*/
|
||||
|
||||
function postUpdatePassword (req, res, next) {
|
||||
req.assert('password', 'Password must be at least 4 characters long').len(4);
|
||||
req.assert('password', 'Password must be at least 4 characters long')
|
||||
.len(4);
|
||||
|
||||
req.assert('confirmPassword', 'Passwords do not match')
|
||||
.equals(req.body.password);
|
||||
|
||||
@ -571,7 +579,7 @@ function postUpdatePassword (req, res, next) {
|
||||
*/
|
||||
|
||||
function postDeleteAccount (req, res, next) {
|
||||
User.remove({ _id: req.user.id }, function(err) {
|
||||
User.destroyById(req.user.id, function(err) {
|
||||
if (err) { return next(err); }
|
||||
req.logout();
|
||||
req.flash('info', { msg: 'Your account has been deleted.' });
|
||||
@ -612,10 +620,14 @@ function getReset (req, res, next) {
|
||||
if (req.isAuthenticated()) {
|
||||
return res.redirect('/');
|
||||
}
|
||||
User
|
||||
.findOne({ resetPasswordToken: req.params.token })
|
||||
.where('resetPasswordExpires').gt(Date.now())
|
||||
.exec(function(err, user) {
|
||||
User.findOne(
|
||||
{
|
||||
where: {
|
||||
resetPasswordToken: req.params.token,
|
||||
resetPasswordExpires: Date.now()
|
||||
}
|
||||
},
|
||||
function(err, user) {
|
||||
if (err) { return next(err); }
|
||||
if (!user) {
|
||||
req.flash('errors', {
|
||||
@ -645,10 +657,14 @@ function postReset (req, res, next) {
|
||||
|
||||
async.waterfall([
|
||||
function(done) {
|
||||
User
|
||||
.findOne({ resetPasswordToken: req.params.token })
|
||||
.where('resetPasswordExpires').gt(Date.now())
|
||||
.exec(function(err, user) {
|
||||
User.findOne(
|
||||
{
|
||||
where: {
|
||||
resetPasswordToken: req.params.token,
|
||||
resetPasswordExpires: Date.now()
|
||||
}
|
||||
},
|
||||
function(err, user) {
|
||||
if (err) { return next(err); }
|
||||
if (!user) {
|
||||
req.flash('errors', {
|
||||
@ -802,5 +818,4 @@ function postForgot (req, res, next) {
|
||||
res.redirect('/forgot');
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
@ -1,21 +1,22 @@
|
||||
var express = require('express'),
|
||||
var Rx = require('rx'),
|
||||
Twit = require('twit'),
|
||||
async = require('async'),
|
||||
moment = require('moment'),
|
||||
Twit = require('twit'),
|
||||
Slack = require('node-slack'),
|
||||
request = require('request'),
|
||||
debug = require('debug')('freecc:cntr:resources'),
|
||||
constantStrings = require('../resources/constantStrings.json'),
|
||||
|
||||
User = require('../../common/models/User'),
|
||||
Challenge = require('../../common/models/Challenge'),
|
||||
Story = require('../../common/models/Story'),
|
||||
FieldGuide = require('../../common/models/FieldGuide'),
|
||||
Nonprofit = require('../../common/models/Nonprofit'),
|
||||
constantStrings = require('../resources/constantStrings.json'),
|
||||
secrets = require('../../config/secrets');
|
||||
|
||||
var slack = new Slack(secrets.slackHook);
|
||||
var router = express.Router();
|
||||
module.exports = function(app) {
|
||||
var router = app.Router();
|
||||
var User = app.models.User;
|
||||
var Challenge = app.models.Challenge;
|
||||
var Story = app.models.Store;
|
||||
var FieldGuide = app.models.FieldGuide;
|
||||
var Nonprofit = app.models.Nonprofit;
|
||||
|
||||
router.get('/api/github', githubCalls);
|
||||
router.get('/api/blogger', bloggerCalls);
|
||||
@ -63,7 +64,8 @@ function slackInvite(req, res, next) {
|
||||
if (!error && response.statusCode === 200) {
|
||||
req.flash('success', {
|
||||
msg: 'We\'ve successfully requested an invite for you.' +
|
||||
' Please check your email and follow the instructions from Slack.'
|
||||
' Please check your email and follow the ' +
|
||||
'instructions from Slack.'
|
||||
});
|
||||
req.user.sentSlackInvite = true;
|
||||
req.user.save(function(err) {
|
||||
@ -171,7 +173,8 @@ function getPair(req, res) {
|
||||
].join(''),
|
||||
channel: '#letspair',
|
||||
username: 'Companion Cube',
|
||||
'icon_url': 'https://lh3.googleusercontent.com/-f6xDPDV2rPE/AAAAAAAAAAI/' +
|
||||
'icon_url':
|
||||
'https://lh3.googleusercontent.com/-f6xDPDV2rPE/AAAAAAAAAAI/' +
|
||||
'AAAAAAAAAAA/mdlESXQu11Q/photo.jpg'
|
||||
});
|
||||
return res.sendStatus(200);
|
||||
@ -181,74 +184,119 @@ function sitemap(req, res, next) {
|
||||
var appUrl = 'http://www.freecodecamp.com';
|
||||
var now = moment(new Date()).format('YYYY-MM-DD');
|
||||
|
||||
|
||||
// TODO(berks): refactor async to rx
|
||||
async.parallel({
|
||||
users: function(callback) {
|
||||
User.aggregate()
|
||||
.group({_id: 1, usernames: { $addToSet: '$profile.username'}})
|
||||
.match({'profile.username': { $ne: ''}})
|
||||
.exec(function(err, users) {
|
||||
User.find(
|
||||
{
|
||||
where: { 'profile.username': { nlike: '' } },
|
||||
fields: { 'profile.username': true }
|
||||
},
|
||||
function(err, users) {
|
||||
if (err) {
|
||||
debug('User err: ', err);
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, users[0].usernames);
|
||||
Rx.Observable.from(users)
|
||||
.map(function(user) {
|
||||
return user.profile.username;
|
||||
})
|
||||
.toArray()
|
||||
.subscribe(
|
||||
function(usernames) {
|
||||
callback(null, usernames);
|
||||
},
|
||||
callback
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
challenges: function (callback) {
|
||||
Challenge.aggregate()
|
||||
.group({_id: 1, names: { $addToSet: '$name'}})
|
||||
.exec(function (err, challenges) {
|
||||
Challenge.find(
|
||||
{ fields: { name: true } },
|
||||
function (err, challenges) {
|
||||
if (err) {
|
||||
debug('Challenge err: ', err);
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, challenges[0].names);
|
||||
Rx.Observable.from(challenges)
|
||||
.map(function(challenge) {
|
||||
return challenge.name;
|
||||
})
|
||||
.toArray()
|
||||
.subscribe(
|
||||
callback.bind(callback, null),
|
||||
callback
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
stories: function (callback) {
|
||||
Story.aggregate()
|
||||
.group({_id: 1, links: {$addToSet: '$link'}})
|
||||
.exec(function (err, stories) {
|
||||
Story.find(
|
||||
{ field: { link: true } },
|
||||
function (err, stories) {
|
||||
if (err) {
|
||||
debug('Story err: ', err);
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, stories[0].links);
|
||||
Rx.Observable.from(stories)
|
||||
.map(function(story) {
|
||||
return story.link;
|
||||
})
|
||||
.toArray()
|
||||
.subscribe(
|
||||
callback.bind(callback, null),
|
||||
callback
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
},
|
||||
nonprofits: function (callback) {
|
||||
Nonprofit.aggregate()
|
||||
.group({_id: 1, names: { $addToSet: '$name'}})
|
||||
.exec(function (err, nonprofits) {
|
||||
Nonprofit.find(
|
||||
{ field: { name: true } },
|
||||
function(err, nonprofits) {
|
||||
if (err) {
|
||||
debug('User err: ', err);
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, nonprofits[0].names);
|
||||
Rx.Observable.from(nonprofits)
|
||||
.map(function(nonprofit) {
|
||||
return nonprofit.name;
|
||||
})
|
||||
.toArray()
|
||||
.subscribe(
|
||||
callback.bind(callback, null),
|
||||
callback
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
fieldGuides: function(callback) {
|
||||
FieldGuide.aggregate()
|
||||
.group({_id: 1, names: { $addToSet: '$name'}})
|
||||
.exec(function (err, fieldGuides) {
|
||||
FieldGuide.find(
|
||||
{ field: { name: true } },
|
||||
function(err, fieldGuides) {
|
||||
if (err) {
|
||||
debug('User err: ', err);
|
||||
callback(err);
|
||||
} else {
|
||||
callback(null, fieldGuides[0].names);
|
||||
Rx.Observable.from(fieldGuides)
|
||||
.map(function(fieldGuide) {
|
||||
return fieldGuide.name;
|
||||
})
|
||||
.toArray()
|
||||
.subscribe(
|
||||
callback.bind(callback, null),
|
||||
callback
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, function(err, results) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
} else {
|
||||
}
|
||||
setTimeout(function() {
|
||||
res.header('Content-Type', 'application/xml');
|
||||
res.render('resources/sitemap', {
|
||||
@ -262,7 +310,6 @@ function sitemap(req, res, next) {
|
||||
});
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@ -442,5 +489,4 @@ function getCats(req, res) {
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
};
|
||||
|
Reference in New Issue
Block a user