From 2d8f75ad8a610f2f53e3ae02492f3fe70af1494b Mon Sep 17 00:00:00 2001 From: GeneTinderholm Date: Wed, 6 Dec 2017 11:25:27 -0600 Subject: [PATCH 1/7] Johann back --- .gitignore | 2 + README.md | 1 + app.js | 54 +++ bin/www | 90 ++++ config/mongo.json | 13 + models/comment.js | 17 + models/index.js | 12 + models/post.js | 16 + models/user.js | 15 + mongo.js | 10 + package-lock.json | 833 +++++++++++++++++++++++++++++++++++ package.json | 20 + public/stylesheets/style.css | 8 + repl.js | 12 + routes/index.js | 9 + routes/users.js | 71 +++ seeds/index.js | 13 + views/error.hbs | 3 + views/index.hbs | 2 + views/layout.hbs | 18 + views/users/edit.hbs | 17 + views/users/index.hbs | 33 ++ views/users/new.hbs | 15 + views/users/show.hbs | 21 + 24 files changed, 1305 insertions(+) create mode 100644 .gitignore create mode 100644 app.js create mode 100755 bin/www create mode 100644 config/mongo.json create mode 100644 models/comment.js create mode 100644 models/index.js create mode 100644 models/post.js create mode 100644 models/user.js create mode 100644 mongo.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/stylesheets/style.css create mode 100644 repl.js create mode 100644 routes/index.js create mode 100644 routes/users.js create mode 100644 seeds/index.js create mode 100644 views/error.hbs create mode 100644 views/index.hbs create mode 100644 views/layout.hbs create mode 100644 views/users/edit.hbs create mode 100644 views/users/index.hbs create mode 100644 views/users/new.hbs create mode 100644 views/users/show.hbs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a6ec74b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +*.swp diff --git a/README.md b/README.md index 7513987..1908e37 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ +Gene Tinderholm # assignment_thoreddit A social news web application for Viking thunder Gods diff --git a/app.js b/app.js new file mode 100644 index 0000000..34f3a20 --- /dev/null +++ b/app.js @@ -0,0 +1,54 @@ +var express = require('express'); +var path = require('path'); +var favicon = require('serve-favicon'); +var logger = require('morgan'); +var cookieParser = require('cookie-parser'); +var bodyParser = require('body-parser'); + +var index = require('./routes/index'); +var users = require('./routes/users'); + +var app = express(); +let mongoose = require('mongoose'); + +// view engine setup +app.set('views', path.join(__dirname, 'views')); +app.set('view engine', 'hbs'); + +// uncomment after placing your favicon in /public +//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); +app.use(logger('dev')); +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({extended: false})); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, 'public'))); +app.use((req, res, next) => { + if (mongoose.connection.readyState) { + next(); + } else { + require('./mongo')().then(() => next()); + } +}); + +app.use('/', index); +app.use('/users', users); + +// catch 404 and forward to error handler +app.use(function(req, res, next) { + var err = new Error('Not Found'); + err.status = 404; + next(err); +}); + +// error handler +app.use(function(err, req, res, next) { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render('error'); +}); + +module.exports = app; diff --git a/bin/www b/bin/www new file mode 100755 index 0000000..b835f12 --- /dev/null +++ b/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('assignment-thoreddit:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/config/mongo.json b/config/mongo.json new file mode 100644 index 0000000..cff3d4f --- /dev/null +++ b/config/mongo.json @@ -0,0 +1,13 @@ +{ + "development": { + "database": "assignment_thoreddit_development", + "host": "localhost" + }, + "test": { + "database": "assignment_thoreddit_test", + "host": "localhost" + }, + "production": { + "use_env_variable": "MONGODB_URI" + } +} diff --git a/models/comment.js b/models/comment.js new file mode 100644 index 0000000..9273fdd --- /dev/null +++ b/models/comment.js @@ -0,0 +1,17 @@ +let mongoose = require('mongoose'); +let Schema = mongoose.Schema; + +let CommentSchema = new Schema( + { + body: String, + parentId: Schema.Types.ObjectId, + userId: Schema.Types.ObjectId, + }, + { + timestamps: true, + }, +); + +let Comment = mongoose.model('Comment', CommentSchema); + +module.exports = Comment; diff --git a/models/index.js b/models/index.js new file mode 100644 index 0000000..2cc3b00 --- /dev/null +++ b/models/index.js @@ -0,0 +1,12 @@ +let mongoose = require('mongoose'); +let bluebird = require('bluebird'); + +mongoose.Promise = bluebird; + +let models = {}; + +models.User = require('./user'); +models.Post = require('./post'); +models.Comment = require('./comment'); + +module.exports = models; diff --git a/models/post.js b/models/post.js new file mode 100644 index 0000000..0309929 --- /dev/null +++ b/models/post.js @@ -0,0 +1,16 @@ +let mongoose = require('mongoose'); +let Schema = mongoose.Schema; + +let PostSchema = new Schema( + { + body: String, + userId: Schema.Types.ObjectId, + }, + { + timestamps: true, + }, +); + +let Post = mongoose.model('Post', PostSchema); + +module.exports = Post; diff --git a/models/user.js b/models/user.js new file mode 100644 index 0000000..818f65c --- /dev/null +++ b/models/user.js @@ -0,0 +1,15 @@ +let mongoose = require('mongoose'); +let Schema = mongoose.Schema; + +let UserSchema = new Schema( + { + username: String, + }, + { + timestamps: true, + }, +); + +let User = mongoose.model('User', UserSchema); + +module.exports = User; diff --git a/mongo.js b/mongo.js new file mode 100644 index 0000000..4528533 --- /dev/null +++ b/mongo.js @@ -0,0 +1,10 @@ +let mongoose = require('mongoose'); +let env = process.env.NODE_ENV || 'development'; +let config = require('./config/mongo')[env]; + +module.exports = () => { + let envUrl = process.env[config.use_env_variable]; + let localUrl = `mongodb://${config.host}/${config.database}`; + let mongoUrl = envUrl ? envUrl : localUrl; + return mongoose.connect(mongoUrl); +}; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fefd2bd --- /dev/null +++ b/package-lock.json @@ -0,0 +1,833 @@ +{ + "name": "assignment-thoreddit", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "requires": { + "mime-types": "2.1.17", + "negotiator": "0.6.1" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "async": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.4" + } + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.1", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" + } + }, + "bson": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "optional": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "optional": true + } + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true + }, + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" + }, + "es6-promise": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz", + "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", + "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", + "requires": { + "accepts": "1.3.4", + "array-flatten": "1.1.1", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.1", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.0.6", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "1.1.5", + "qs": "6.5.0", + "range-parser": "1.2.0", + "send": "0.15.6", + "serve-static": "1.12.6", + "setprototypeof": "1.0.3", + "statuses": "1.3.1", + "type-is": "1.6.15", + "utils-merge": "1.0.0", + "vary": "1.1.2" + }, + "dependencies": { + "qs": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "finalhandler": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "handlebars": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz", + "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=", + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + } + } + }, + "hbs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.0.1.tgz", + "integrity": "sha1-S/2YZQ3IydrESzyprfnAmOi8M7Y=", + "requires": { + "handlebars": "4.0.5", + "walk": "2.3.9" + } + }, + "hooks-fixed": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hooks-fixed/-/hooks-fixed-2.0.2.tgz", + "integrity": "sha512-YurCM4gQSetcrhwEtpQHhQ4M7Zo7poNGqY4kQGeBS6eZtOcT3tnNs01ThFa0jYBByAiYt1MjMjP/YApG0EnAvQ==" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "kareem": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-1.5.0.tgz", + "integrity": "sha1-4+QQHZ3P3imXadr0tNtk2JXRdEg=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "optional": true + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "mongodb": { + "version": "2.2.33", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.33.tgz", + "integrity": "sha1-tTfEcdNKZlG0jzb9vyl1A0Dgi1A=", + "requires": { + "es6-promise": "3.2.1", + "mongodb-core": "2.1.17", + "readable-stream": "2.2.7" + } + }, + "mongodb-core": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.17.tgz", + "integrity": "sha1-pBizN6FKFJkPtRC5I97mqBMXPfg=", + "requires": { + "bson": "1.0.4", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "4.13.6", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.6.tgz", + "integrity": "sha512-H+loD0D8UCwGmbOzWV7rZAf6/efRr9CPGB1Bess/IIjiWvpRQNo4zH4UHkueKoEbMWdnSYenjdEL8A0Q8p7JXg==", + "requires": { + "async": "2.1.4", + "bson": "1.0.4", + "hooks-fixed": "2.0.2", + "kareem": "1.5.0", + "lodash.get": "4.4.2", + "mongodb": "2.2.33", + "mpath": "0.3.0", + "mpromise": "0.5.5", + "mquery": "2.3.3", + "ms": "2.0.0", + "muri": "1.3.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" + } + }, + "mongooseeder": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/mongooseeder/-/mongooseeder-2.0.5.tgz", + "integrity": "sha512-w1+g48UdomQKOukO4Kr89MikmX06qLXs8GvPVJMng1TRRbeZCEv5ZnL0cutoLvDeFfouH+xYB+qDpnqut7beFQ==" + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "requires": { + "basic-auth": "2.0.0", + "debug": "2.6.9", + "depd": "1.1.1", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } + }, + "mpath": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", + "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" + }, + "mpromise": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mpromise/-/mpromise-0.5.5.tgz", + "integrity": "sha1-9bJCWddjrMIlewoMjG2Gb9UXMuY=" + }, + "mquery": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-2.3.3.tgz", + "integrity": "sha512-NC8L14kn+qxJbbJ1gbcEMDxF0sC3sv+1cbRReXXwVvowcwY1y9KoVZFq0ebwARibsadu8lx8nWGvm3V0Pf0ZWQ==", + "requires": { + "bluebird": "3.5.0", + "debug": "2.6.9", + "regexp-clone": "0.0.1", + "sliced": "0.0.5" + }, + "dependencies": { + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "sliced": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "muri": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/muri/-/muri-1.3.0.tgz", + "integrity": "sha512-FiaFwKl864onHFFUV/a2szAl7X0fxVlSKNdhTf+BM8i8goEgYut8u5P9MqQqIYwvaMxjzVESsoEm/2kfkFH1rg==" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "proxy-addr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.4.0" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz", + "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=", + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "regexp-clone": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.4.1" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "send": { + "version": "0.15.6", + "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", + "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", + "requires": { + "debug": "2.6.9", + "depd": "1.1.1", + "destroy": "1.0.4", + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.3.4", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + } + } + }, + "serve-favicon": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", + "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", + "requires": { + "etag": "1.8.1", + "fresh": "0.5.2", + "ms": "2.0.0", + "parseurl": "1.3.2", + "safe-buffer": "5.1.1" + } + }, + "serve-static": { + "version": "1.12.6", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", + "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", + "requires": { + "encodeurl": "1.0.1", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.15.6" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": "1.0.1" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "type-is": { + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.17" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "optional": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "walk": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", + "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=", + "requires": { + "foreachasync": "3.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "optional": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4315822 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "assignment-thoreddit", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "bluebird": "^3.5.1", + "body-parser": "~1.18.2", + "cookie-parser": "~1.4.3", + "debug": "~2.6.9", + "express": "~4.15.5", + "hbs": "~4.0.1", + "mongoose": "^4.13.6", + "mongooseeder": "^2.0.5", + "morgan": "~1.9.0", + "serve-favicon": "~2.4.5" + } +} diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/repl.js b/repl.js new file mode 100644 index 0000000..93c374d --- /dev/null +++ b/repl.js @@ -0,0 +1,12 @@ +let mongoose = require('mongoose'); +let repl = require('repl').start({}); +let models = require('./models'); + +require('./mongo')().then(() => { + repl.context.models = models; + Object.keys(models).forEach(modelName => { + repl.context[modelName] = mongoose.model(modelName); + }); + + repl.context.lg = data => console.log(data); +}); diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/users.js b/routes/users.js new file mode 100644 index 0000000..57bd857 --- /dev/null +++ b/routes/users.js @@ -0,0 +1,71 @@ +var express = require('express'); +var router = express.Router(); +let mongoose = require('mongoose'); +let models = require('./../models'); +let User = mongoose.model('User'); + +/* GET users listing. */ +router.get('/', function(req, res) { + User.find({}) + .then(users => { + res.render('users/index', {users}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.get('/:id', (req, res) => { + User.findById(req.params.id) + .then(user => { + res.render('users/show', {user}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.get('/new', (req, res) => { + res.render('users/new'); +}); + +router.post('/', (req, res) => { + var user = new User({ + username: req.body.user.username, + }); + + user + .save() + .then(user => { + res.redirect(`/users/${user.id}`); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.delete('/:id', (req, res) => { + User.findByIdAndRemove(req.params.id) + .then(() => { + req.method = 'GET'; + res.redirect('/users'); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.get('/:id/edit', (req, res) => { + User.findById(req.params.id) + .then(user => { + res.render('users/edit', {user}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.put('/:id', (req, res) => { + var userParams = { + username: req.body.user.username, + }; + + User.findByIdAndUpdate(req.params.id, userParams) + .then(user => { + req.method = 'GET'; + res.redirect(`/users/${user.id}`); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +module.exports = router; diff --git a/seeds/index.js b/seeds/index.js new file mode 100644 index 0000000..b5fc78c --- /dev/null +++ b/seeds/index.js @@ -0,0 +1,13 @@ +const mongoose = require('mongoose'); +const mongooseeder = require('mongooseeder'); +const models = require('../models'); + +const mongodbUrl = 'mongodb://localhost/assignment_thoreddit_development'; + +mongooseeder.seed({ + mongodbUrl: mongodbUrl, + models: models, + clean: true, + mongoose: mongoose, + seeds: () => {}, +}); diff --git a/views/error.hbs b/views/error.hbs new file mode 100644 index 0000000..0659765 --- /dev/null +++ b/views/error.hbs @@ -0,0 +1,3 @@ +

{{message}}

+

{{error.status}}

+
{{error.stack}}
diff --git a/views/index.hbs b/views/index.hbs new file mode 100644 index 0000000..1f308fd --- /dev/null +++ b/views/index.hbs @@ -0,0 +1,2 @@ +

{{title}}

+

Welcome to {{title}}

diff --git a/views/layout.hbs b/views/layout.hbs new file mode 100644 index 0000000..6e62d6a --- /dev/null +++ b/views/layout.hbs @@ -0,0 +1,18 @@ + + + + + {{title}} + + + + + + + {{{body}}} + + + + + + diff --git a/views/users/edit.hbs b/views/users/edit.hbs new file mode 100644 index 0000000..545702b --- /dev/null +++ b/views/users/edit.hbs @@ -0,0 +1,17 @@ + + + +
+ + +
+ + +
+ +
+ +
+
diff --git a/views/users/index.hbs b/views/users/index.hbs new file mode 100644 index 0000000..92b2ad6 --- /dev/null +++ b/views/users/index.hbs @@ -0,0 +1,33 @@ + + +{{#if users.length}} + + + + + + + + + + {{#each users as |user|}} + + + + + + {{/each}} + +
Username
+ {{user.username}} + + Edit + + Delete +
+{{else}} +

No users

+{{/if}} diff --git a/views/users/new.hbs b/views/users/new.hbs new file mode 100644 index 0000000..7124ca4 --- /dev/null +++ b/views/users/new.hbs @@ -0,0 +1,15 @@ + + + +
+
+ + +
+ +
+ +
+
diff --git a/views/users/show.hbs b/views/users/show.hbs new file mode 100644 index 0000000..f7df66f --- /dev/null +++ b/views/users/show.hbs @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + +
KeyValue
Username{{ user.username }}
From c0952c2bc1a9a1cb54798b8dd4e251b6170b6e38 Mon Sep 17 00:00:00 2001 From: GeneTinderholm Date: Wed, 6 Dec 2017 12:28:14 -0600 Subject: [PATCH 2/7] works --- app.js | 9 +++++++++ package-lock.json | 16 ++++++++++++++++ package.json | 2 ++ routes/users.js | 14 ++++++++------ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/app.js b/app.js index 34f3a20..98dc2ad 100644 --- a/app.js +++ b/app.js @@ -20,6 +20,15 @@ app.set('view engine', 'hbs'); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: false})); +const methodOverride = require('method-override'); +const getPostSupport = require('express-method-override-get-post-support'); + +// Pass the callback and options from +// the support package +app.use(methodOverride( + getPostSupport.callback, + getPostSupport.options // { methods: ['POST', 'GET'] } +)); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use((req, res, next) => { diff --git a/package-lock.json b/package-lock.json index fefd2bd..1678584 100644 --- a/package-lock.json +++ b/package-lock.json @@ -251,6 +251,11 @@ } } }, + "express-method-override-get-post-support": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/express-method-override-get-post-support/-/express-method-override-get-post-support-1.0.0.tgz", + "integrity": "sha512-uBS1tJsdoRgTa3ujiJRXC1z6haAdSccZs1tH0a4NTpm9dm598xgM/C7rg+x3qPf14GLQf90h6ltsQ4x68zkt/Q==" + }, "finalhandler": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", @@ -399,6 +404,17 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "method-override": { + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz", + "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=", + "requires": { + "debug": "2.6.9", + "methods": "1.1.2", + "parseurl": "1.3.2", + "vary": "1.1.2" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", diff --git a/package.json b/package.json index 4315822..846a1c7 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.15.5", + "express-method-override-get-post-support": "^1.0.0", "hbs": "~4.0.1", + "method-override": "^2.3.10", "mongoose": "^4.13.6", "mongooseeder": "^2.0.5", "morgan": "~1.9.0", diff --git a/routes/users.js b/routes/users.js index 57bd857..484b580 100644 --- a/routes/users.js +++ b/routes/users.js @@ -13,6 +13,10 @@ router.get('/', function(req, res) { .catch(e => res.status(500).send(e.stack)); }); +router.get('/new', (req, res) => { + res.render('users/new'); +}); + router.get('/:id', (req, res) => { User.findById(req.params.id) .then(user => { @@ -21,13 +25,10 @@ router.get('/:id', (req, res) => { .catch(e => res.status(500).send(e.stack)); }); -router.get('/new', (req, res) => { - res.render('users/new'); -}); - router.post('/', (req, res) => { + console.log(req.body); var user = new User({ - username: req.body.user.username, + username: req.body['user[username]'], }); user @@ -56,8 +57,9 @@ router.get('/:id/edit', (req, res) => { }); router.put('/:id', (req, res) => { + console.log(req.body, userParams); var userParams = { - username: req.body.user.username, + username: req.body['user[username]'], }; User.findByIdAndUpdate(req.params.id, userParams) From 05e81b55c5bc5e3ae4704c2c01f0c7bf367f4477 Mon Sep 17 00:00:00 2001 From: Johann Date: Wed, 6 Dec 2017 11:00:26 -0800 Subject: [PATCH 3/7] up to posts working --- app.js | 2 ++ routes/posts.js | 73 +++++++++++++++++++++++++++++++++++++++++++ views/posts/index.hbs | 33 +++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 routes/posts.js create mode 100644 views/posts/index.hbs diff --git a/app.js b/app.js index 98dc2ad..4726441 100644 --- a/app.js +++ b/app.js @@ -7,6 +7,7 @@ var bodyParser = require('body-parser'); var index = require('./routes/index'); var users = require('./routes/users'); +const post = require('./routes/posts'); var app = express(); let mongoose = require('mongoose'); @@ -41,6 +42,7 @@ app.use((req, res, next) => { app.use('/', index); app.use('/users', users); +app.use('/posts', post); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/routes/posts.js b/routes/posts.js new file mode 100644 index 0000000..696158f --- /dev/null +++ b/routes/posts.js @@ -0,0 +1,73 @@ +var express = require('express'); +var router = express.Router(); +let mongoose = require('mongoose'); +let models = require('./../models'); +let Post = mongoose.model('Post'); + +/* GET posts listing. */ +router.get('/', function(req, res) { + Post.find({}) + .then(posts => { + res.render('posts/index', {posts}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.get('/new', (req, res) => { + res.render('posts/new'); +}); + +router.get('/:id', (req, res) => { + Post.findById(req.params.id) + .then(post => { + res.render('posts/show', {post}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.post('/', (req, res) => { + console.log(req.body); + var post = new Post({ + postname: req.body['post[postname]'], + }); + + post + .save() + .then(post => { + res.redirect(`/posts/${post.id}`); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.delete('/:id', (req, res) => { + Post.findByIdAndRemove(req.params.id) + .then(() => { + req.method = 'GET'; + res.redirect('/posts'); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.get('/:id/edit', (req, res) => { + Post.findById(req.params.id) + .then(post => { + res.render('posts/edit', {post}); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +router.put('/:id', (req, res) => { + console.log(req.body, postParams); + var postParams = { + postname: req.body['post[postname]'], + }; + + Post.findByIdAndUpdate(req.params.id, postParams) + .then(post => { + req.method = 'GET'; + res.redirect(`/posts/${post.id}`); + }) + .catch(e => res.status(500).send(e.stack)); +}); + +module.exports = router; diff --git a/views/posts/index.hbs b/views/posts/index.hbs new file mode 100644 index 0000000..391a8b1 --- /dev/null +++ b/views/posts/index.hbs @@ -0,0 +1,33 @@ + + +{{#if posts.length}} + + + + + + + + + + {{#each posts as |post|}} + + + + + + {{/each}} + +
Username
+ {{post.body}} + + Edit + + Delete +
+{{else}} +

No posts

+{{/if}} From e1128d4631239ca34bc3a3e7f4ba4d35ab753dfa Mon Sep 17 00:00:00 2001 From: Johann Date: Wed, 6 Dec 2017 13:34:19 -0800 Subject: [PATCH 4/7] seeded --- models/comment.js | 12 +++++++++-- models/post.js | 15 +++++++++++-- package.json | 3 ++- seeds/index.js | 50 ++++++++++++++++++++++++++++++++++++++++++- views/posts/index.hbs | 2 +- 5 files changed, 75 insertions(+), 7 deletions(-) diff --git a/models/comment.js b/models/comment.js index 9273fdd..2f06f3e 100644 --- a/models/comment.js +++ b/models/comment.js @@ -4,8 +4,16 @@ let Schema = mongoose.Schema; let CommentSchema = new Schema( { body: String, - parentId: Schema.Types.ObjectId, - userId: Schema.Types.ObjectId, + childIds: [ + { + type: Schema.Types.ObjectId, + ref: "Comment" + } + ], + userId: { + type: Schema.Types.ObjectId, + ref: "User" + }, }, { timestamps: true, diff --git a/models/post.js b/models/post.js index 0309929..f4bd887 100644 --- a/models/post.js +++ b/models/post.js @@ -4,11 +4,22 @@ let Schema = mongoose.Schema; let PostSchema = new Schema( { body: String, - userId: Schema.Types.ObjectId, + title: String, + userId: { + type: Schema.Types.ObjectId, + ref: 'User' + }, + childIds: [ + { + type: Schema.Types.ObjectId, + ref: 'Comment' + }, + ], + score: Number }, { timestamps: true, - }, + } ); let Post = mongoose.model('Post', PostSchema); diff --git a/package.json b/package.json index 846a1c7..c9e3450 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "version": "0.0.0", "private": true, "scripts": { - "start": "node ./bin/www" + "start": "node ./bin/www", + "seed": "node seeds/index.js" }, "dependencies": { "bluebird": "^3.5.1", diff --git a/seeds/index.js b/seeds/index.js index b5fc78c..bf834c7 100644 --- a/seeds/index.js +++ b/seeds/index.js @@ -1,6 +1,9 @@ const mongoose = require('mongoose'); const mongooseeder = require('mongooseeder'); const models = require('../models'); +const User = models.User; +const Comment = models.Comment; +const Post = models.Post; const mongodbUrl = 'mongodb://localhost/assignment_thoreddit_development'; @@ -9,5 +12,50 @@ mongooseeder.seed({ models: models, clean: true, mongoose: mongoose, - seeds: () => {}, + seeds: () => { + const users = []; + + for (let i = 0; i < 10; i++) { + const user = new User({ + username: `foobar${i}`, + }); + users.push(user); + } + + const posts = []; + + for (let i = 0; i < 10; i++) { + const post = new Post({ + childIds: [], + title: `title${i}`, + body: `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`, + userId: users[i].id + }); + posts.push(post); + } + + const comments = []; + + + for (var i = 0, len = 50; i < len; i++) { + const comment = new Comment({ + body: `Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.`, + childIds: [] + }) + posts[Math.floor(i/5)].childIds.push(comment.id); + comments.push(comment); + } + + const promises = []; + const collections = [users, posts, comments]; + + collections.forEach(collection => { + collection.forEach(model => { + const promise = model.save(); + promises.push(promise); + }); + }); + + return Promise.all(promises); + } }); diff --git a/views/posts/index.hbs b/views/posts/index.hbs index 391a8b1..1301457 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -16,7 +16,7 @@ {{#each posts as |post|}} - {{post.body}} + {{post.title}} Edit From 720083895b4a583d3f6eedcddb7653a78663d98c Mon Sep 17 00:00:00 2001 From: GeneTinderholm Date: Wed, 6 Dec 2017 16:28:40 -0600 Subject: [PATCH 5/7] increased functionality! (login) --- app.js | 6 ++++++ package-lock.json | 41 +++++++++++++++++++++++++++++++++++++++++ package.json | 1 + routes/index.js | 9 ++++++++- routes/posts.js | 17 ++++++++++++++--- views/index.hbs | 6 ++++-- views/posts/new.hbs | 19 +++++++++++++++++++ views/posts/show.hbs | 12 ++++++++++++ 8 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 views/posts/new.hbs create mode 100644 views/posts/show.hbs diff --git a/app.js b/app.js index 4726441..2163d31 100644 --- a/app.js +++ b/app.js @@ -4,6 +4,7 @@ var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); +let session = require('express-session'); var index = require('./routes/index'); var users = require('./routes/users'); @@ -31,6 +32,11 @@ app.use(methodOverride( getPostSupport.options // { methods: ['POST', 'GET'] } )); app.use(cookieParser()); +app.use(session({ + secret:'314159', + resave: false, + saveUninitialize: true +})); app.use(express.static(path.join(__dirname, 'public'))); app.use((req, res, next) => { if (mongoose.connection.readyState) { diff --git a/package-lock.json b/package-lock.json index 1678584..bd2c4a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -155,6 +155,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "crc": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", + "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -256,6 +261,29 @@ "resolved": "https://registry.npmjs.org/express-method-override-get-post-support/-/express-method-override-get-post-support-1.0.0.tgz", "integrity": "sha512-uBS1tJsdoRgTa3ujiJRXC1z6haAdSccZs1tH0a4NTpm9dm598xgM/C7rg+x3qPf14GLQf90h6ltsQ4x68zkt/Q==" }, + "express-session": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", + "integrity": "sha512-r0nrHTCYtAMrFwZ0kBzZEXa1vtPVrw0dKvGSrKP4dahwBQ1BJpF2/y1Pp4sCD/0kvxV4zZeclyvfmw0B4RMJQA==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "crc": "3.4.4", + "debug": "2.6.9", + "depd": "1.1.1", + "on-headers": "1.0.1", + "parseurl": "1.3.2", + "uid-safe": "2.1.5", + "utils-merge": "1.0.1" + }, + "dependencies": { + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + } + } + }, "finalhandler": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", @@ -606,6 +634,11 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", @@ -794,6 +827,14 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "1.0.0" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", diff --git a/package.json b/package.json index c9e3450..0ee96bd 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "debug": "~2.6.9", "express": "~4.15.5", "express-method-override-get-post-support": "^1.0.0", + "express-session": "^1.15.6", "hbs": "~4.0.1", "method-override": "^2.3.10", "mongoose": "^4.13.6", diff --git a/routes/index.js b/routes/index.js index ecca96a..50d23c1 100644 --- a/routes/index.js +++ b/routes/index.js @@ -3,7 +3,14 @@ var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); + res.render('index'); +}); + +router.post('/', (req, res, next) => { + console.log('here1'); + req.session.username = req.body.username; + console.log('here2'); + res.redirect('/posts'); }); module.exports = router; diff --git a/routes/posts.js b/routes/posts.js index 696158f..78587db 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -2,6 +2,7 @@ var express = require('express'); var router = express.Router(); let mongoose = require('mongoose'); let models = require('./../models'); +let User = mongoose.model('User'); let Post = mongoose.model('Post'); /* GET posts listing. */ @@ -27,16 +28,26 @@ router.get('/:id', (req, res) => { router.post('/', (req, res) => { console.log(req.body); + let user = User.find({ + $where: this.username === req.session.username + }); + user + .then(user => { var post = new Post({ - postname: req.body['post[postname]'], + title: req.body['post[title]'], + body: req.body['post[body]'], + userId: user.id, + childIds: [] }); post .save() - .then(post => { + .then(post => { res.redirect(`/posts/${post.id}`); }) - .catch(e => res.status(500).send(e.stack)); + .catch(e => res.status(500).send(e.stack)); + }) + .catch(e=> res.status(500).send(e.stack)); }); router.delete('/:id', (req, res) => { diff --git a/views/index.hbs b/views/index.hbs index 1f308fd..2ff66c0 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,2 +1,4 @@ -

{{title}}

-

Welcome to {{title}}

+
+ + +
diff --git a/views/posts/new.hbs b/views/posts/new.hbs new file mode 100644 index 0000000..dc9614e --- /dev/null +++ b/views/posts/new.hbs @@ -0,0 +1,19 @@ + + + + +
+
+ + +
+
+ + +
+
+ +
+
diff --git a/views/posts/show.hbs b/views/posts/show.hbs new file mode 100644 index 0000000..2db221d --- /dev/null +++ b/views/posts/show.hbs @@ -0,0 +1,12 @@ + + +

{{post.body}}

+ + + + + From d2ec4bc0c0371e1d173ce9d7b07f98bba5c9b3fa Mon Sep 17 00:00:00 2001 From: Johann Date: Wed, 6 Dec 2017 15:57:11 -0800 Subject: [PATCH 6/7] stuff --- app.js | 3 +++ dfas.html | 1 + routes/posts.js | 18 +++++++++++++++++- views/partials/comment.hbs | 12 ++++++++++++ views/posts/new.hbs | 2 +- views/posts/show.hbs | 7 +------ 6 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 dfas.html create mode 100644 views/partials/comment.hbs diff --git a/app.js b/app.js index 2163d31..9015389 100644 --- a/app.js +++ b/app.js @@ -17,6 +17,9 @@ let mongoose = require('mongoose'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); +var hbs = require('hbs'); +hbs.registerPartials(__dirname + '/views/partials'); + // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); diff --git a/dfas.html b/dfas.html new file mode 100644 index 0000000..3f9177e --- /dev/null +++ b/dfas.html @@ -0,0 +1 @@ +input diff --git a/routes/posts.js b/routes/posts.js index 78587db..0c25017 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -19,8 +19,23 @@ router.get('/new', (req, res) => { }); router.get('/:id', (req, res) => { + + let commentFinder = (commentable) => { + if (commentable.childIds.length !== 0) { + console.log(commentable); + commentable.populate("Comment"); + commentable.childIds.map(comment => { + return commentFinder(comment) + }) + } + return commentable; + } + Post.findById(req.params.id) + .populate("Comment") .then(post => { + // post = commentFinder(post); + console.log(post); res.render('posts/show', {post}); }) .catch(e => res.status(500).send(e.stack)); @@ -28,8 +43,9 @@ router.get('/:id', (req, res) => { router.post('/', (req, res) => { console.log(req.body); + let user = User.find({ - $where: this.username === req.session.username + $where: `this.username === ${req.session.username}` }); user .then(user => { diff --git a/views/partials/comment.hbs b/views/partials/comment.hbs new file mode 100644 index 0000000..3894b8c --- /dev/null +++ b/views/partials/comment.hbs @@ -0,0 +1,12 @@ +
+
+
+ {{ comment.body }} + {{#if comment.childIds.length}} + {{#each + {{> comment }} + {{else}} + {{/if}} +
+
+
diff --git a/views/posts/new.hbs b/views/posts/new.hbs index dc9614e..5ea21a0 100644 --- a/views/posts/new.hbs +++ b/views/posts/new.hbs @@ -1,6 +1,6 @@ diff --git a/views/posts/show.hbs b/views/posts/show.hbs index 2db221d..d8615f3 100644 --- a/views/posts/show.hbs +++ b/views/posts/show.hbs @@ -1,12 +1,7 @@

{{post.body}}

- - - - - From 7fbecd0e15fe15ed0188fa836ec4177b5dfe0b8b Mon Sep 17 00:00:00 2001 From: Johann Date: Wed, 6 Dec 2017 15:59:10 -0800 Subject: [PATCH 7/7] more stuff --- routes/posts.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/posts.js b/routes/posts.js index 0c25017..ba4516b 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -23,7 +23,7 @@ router.get('/:id', (req, res) => { let commentFinder = (commentable) => { if (commentable.childIds.length !== 0) { console.log(commentable); - commentable.populate("Comment"); + commentable.populate("childIds"); commentable.childIds.map(comment => { return commentFinder(comment) }) @@ -32,7 +32,7 @@ router.get('/:id', (req, res) => { } Post.findById(req.params.id) - .populate("Comment") + .populate("childIds") .then(post => { // post = commentFinder(post); console.log(post);