├── README.md ├── express-todolist ├── app.js ├── controllers │ └── todoController.js ├── package-lock.json ├── package.json ├── public │ └── assets │ │ ├── styles.css │ │ └── todo-list.js └── views │ └── todo.ejs └── nodejs-express-mongodb-movie ├── README.md ├── app.js ├── bower.json ├── models └── movie.js ├── package-lock.json ├── package.json ├── public └── js │ └── admin.js ├── schemas └── movie.js └── views ├── includes ├── head.jade └── header.jade ├── layout.jade └── pages ├── admin.jade ├── detail.jade ├── index.jade └── list.jade /README.md: -------------------------------------------------------------------------------- 1 | # Nodejs -------------------------------------------------------------------------------- /express-todolist/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var todoController = require('./controllers/todoController'); 3 | 4 | var app = express(); 5 | 6 | app.set('view engine','ejs'); 7 | 8 | app.use(express.static('./public')); 9 | 10 | todoController(app); 11 | 12 | app.listen(3000); 13 | 14 | console.log('You are listening to port 3000'); 15 | -------------------------------------------------------------------------------- /express-todolist/controllers/todoController.js: -------------------------------------------------------------------------------- 1 | var bodyParser = require('body-parser'); 2 | 3 | var urlencodedParser = bodyParser.urlencoded({extended:false}); 4 | 5 | var mongoose = require('mongoose'); 6 | 7 | mongoose.connect('mongodb://hfpp2012:hfpp2012@ds151068.mlab.com:51068/todos'); 8 | 9 | var todoSchema = new mongoose.Schema({ 10 | item:String 11 | }); 12 | 13 | var Todo = mongoose.model('Todo',todoSchema); 14 | 15 | // var itemOne = Todo({item: 'buy flowers'}).save(function(err){ 16 | // if(err) throw err; 17 | // console.log('item saved'); 18 | // }) 19 | 20 | // var data = [{item:'get milk'},{item:'walk dog'},{item:'kick some coding ass'}]; 21 | 22 | module.exports = function(app){ 23 | app.get('/todo',function(req,res){ 24 | Todo.find({},function(err,data){ 25 | if(err) throw err; 26 | res.render('todo',{todos:data}); 27 | }) 28 | }); 29 | app.post('/todo',urlencodedParser,function(req,res){ 30 | var itemOne = Todo(req.body).save(function(err,data){ 31 | if(err) throw err; 32 | res.json(data); 33 | }) 34 | // data.push(req.body); 35 | // res.json(data); 36 | }); 37 | app.delete('/todo/:item',function(req,res){ 38 | // data = data.filter(function(todo){ 39 | // return todo.item.replace(/ /g,"-") !== req.params.item; 40 | // }); 41 | // res.json(data); 42 | Todo.find({item:req.params.item.replace(/-/g," ")}).remove(function(err,data){ 43 | if(err) throw err; 44 | res.json(data); 45 | }) 46 | }); 47 | } -------------------------------------------------------------------------------- /express-todolist/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-todolist", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "async": { 22 | "version": "2.1.4", 23 | "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", 24 | "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", 25 | "requires": { 26 | "lodash": "4.17.5" 27 | } 28 | }, 29 | "bluebird": { 30 | "version": "3.5.0", 31 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 32 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" 33 | }, 34 | "body-parser": { 35 | "version": "1.18.2", 36 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 37 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 38 | "requires": { 39 | "bytes": "3.0.0", 40 | "content-type": "1.0.4", 41 | "debug": "2.6.9", 42 | "depd": "1.1.2", 43 | "http-errors": "1.6.3", 44 | "iconv-lite": "0.4.19", 45 | "on-finished": "2.3.0", 46 | "qs": "6.5.1", 47 | "raw-body": "2.3.2", 48 | "type-is": "1.6.16" 49 | } 50 | }, 51 | "bson": { 52 | "version": "1.0.6", 53 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", 54 | "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" 55 | }, 56 | "bytes": { 57 | "version": "3.0.0", 58 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 59 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 60 | }, 61 | "content-disposition": { 62 | "version": "0.5.2", 63 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 64 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 65 | }, 66 | "content-type": { 67 | "version": "1.0.4", 68 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 69 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 70 | }, 71 | "cookie": { 72 | "version": "0.3.1", 73 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 74 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 75 | }, 76 | "cookie-signature": { 77 | "version": "1.0.6", 78 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 79 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 80 | }, 81 | "debug": { 82 | "version": "2.6.9", 83 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 84 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 85 | "requires": { 86 | "ms": "2.0.0" 87 | } 88 | }, 89 | "depd": { 90 | "version": "1.1.2", 91 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 92 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 93 | }, 94 | "destroy": { 95 | "version": "1.0.4", 96 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 97 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 98 | }, 99 | "ee-first": { 100 | "version": "1.1.1", 101 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 102 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 103 | }, 104 | "ejs": { 105 | "version": "2.5.8", 106 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.8.tgz", 107 | "integrity": "sha512-QIDZL54fyV8MDcAsO91BMH1ft2qGGaHIJsJIA/+t+7uvXol1dm413fPcUgUb4k8F/9457rx4/KFE4XfDifrQxQ==" 108 | }, 109 | "encodeurl": { 110 | "version": "1.0.2", 111 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 112 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 113 | }, 114 | "escape-html": { 115 | "version": "1.0.3", 116 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 117 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 118 | }, 119 | "etag": { 120 | "version": "1.8.1", 121 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 122 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 123 | }, 124 | "express": { 125 | "version": "4.16.3", 126 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 127 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 128 | "requires": { 129 | "accepts": "1.3.5", 130 | "array-flatten": "1.1.1", 131 | "body-parser": "1.18.2", 132 | "content-disposition": "0.5.2", 133 | "content-type": "1.0.4", 134 | "cookie": "0.3.1", 135 | "cookie-signature": "1.0.6", 136 | "debug": "2.6.9", 137 | "depd": "1.1.2", 138 | "encodeurl": "1.0.2", 139 | "escape-html": "1.0.3", 140 | "etag": "1.8.1", 141 | "finalhandler": "1.1.1", 142 | "fresh": "0.5.2", 143 | "merge-descriptors": "1.0.1", 144 | "methods": "1.1.2", 145 | "on-finished": "2.3.0", 146 | "parseurl": "1.3.2", 147 | "path-to-regexp": "0.1.7", 148 | "proxy-addr": "2.0.3", 149 | "qs": "6.5.1", 150 | "range-parser": "1.2.0", 151 | "safe-buffer": "5.1.1", 152 | "send": "0.16.2", 153 | "serve-static": "1.13.2", 154 | "setprototypeof": "1.1.0", 155 | "statuses": "1.4.0", 156 | "type-is": "1.6.16", 157 | "utils-merge": "1.0.1", 158 | "vary": "1.1.2" 159 | }, 160 | "dependencies": { 161 | "statuses": { 162 | "version": "1.4.0", 163 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 164 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 165 | } 166 | } 167 | }, 168 | "finalhandler": { 169 | "version": "1.1.1", 170 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 171 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 172 | "requires": { 173 | "debug": "2.6.9", 174 | "encodeurl": "1.0.2", 175 | "escape-html": "1.0.3", 176 | "on-finished": "2.3.0", 177 | "parseurl": "1.3.2", 178 | "statuses": "1.4.0", 179 | "unpipe": "1.0.0" 180 | }, 181 | "dependencies": { 182 | "statuses": { 183 | "version": "1.4.0", 184 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 185 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 186 | } 187 | } 188 | }, 189 | "forwarded": { 190 | "version": "0.1.2", 191 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 192 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 193 | }, 194 | "fresh": { 195 | "version": "0.5.2", 196 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 197 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 198 | }, 199 | "http-errors": { 200 | "version": "1.6.3", 201 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 202 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 203 | "requires": { 204 | "depd": "1.1.2", 205 | "inherits": "2.0.3", 206 | "setprototypeof": "1.1.0", 207 | "statuses": "1.5.0" 208 | } 209 | }, 210 | "iconv-lite": { 211 | "version": "0.4.19", 212 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 213 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 214 | }, 215 | "inherits": { 216 | "version": "2.0.3", 217 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 218 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 219 | }, 220 | "ipaddr.js": { 221 | "version": "1.6.0", 222 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", 223 | "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" 224 | }, 225 | "kareem": { 226 | "version": "2.0.6", 227 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz", 228 | "integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ==" 229 | }, 230 | "lodash": { 231 | "version": "4.17.5", 232 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", 233 | "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" 234 | }, 235 | "lodash.get": { 236 | "version": "4.4.2", 237 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 238 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 239 | }, 240 | "media-typer": { 241 | "version": "0.3.0", 242 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 243 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 244 | }, 245 | "merge-descriptors": { 246 | "version": "1.0.1", 247 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 248 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 249 | }, 250 | "methods": { 251 | "version": "1.1.2", 252 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 253 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 254 | }, 255 | "mime": { 256 | "version": "1.4.1", 257 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 258 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 259 | }, 260 | "mime-db": { 261 | "version": "1.33.0", 262 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 263 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 264 | }, 265 | "mime-types": { 266 | "version": "2.1.18", 267 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 268 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 269 | "requires": { 270 | "mime-db": "1.33.0" 271 | } 272 | }, 273 | "mongodb": { 274 | "version": "3.0.6", 275 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.6.tgz", 276 | "integrity": "sha512-nEg7SnzcyobArDTXEqvI1BasY6Z45h1lyBtVMCS9gRTkbtwrDn6WcLRa+MVRYufrJXxQPkAiYJQ94eCUzit0EQ==", 277 | "requires": { 278 | "mongodb-core": "3.0.6" 279 | } 280 | }, 281 | "mongodb-core": { 282 | "version": "3.0.6", 283 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.6.tgz", 284 | "integrity": "sha512-EIaEyA4DEft4je4Hfa+CDswKdFhlev9V9o5KJo/nITgG6KNKz5Rxg5ZuMGEjGkMwFkydFQ3Kz0CxZ18AXhRrEg==", 285 | "requires": { 286 | "bson": "1.0.6", 287 | "require_optional": "1.0.1" 288 | } 289 | }, 290 | "mongoose": { 291 | "version": "5.0.15", 292 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.15.tgz", 293 | "integrity": "sha512-S37I7V8nZE7JgPExgqb7zOKqezhvQP3JNa60rQEfVESvPkuan2gk/KoYeww7UK/gkKii8mR7OLyuzfRTa7rxxQ==", 294 | "requires": { 295 | "async": "2.1.4", 296 | "bson": "1.0.6", 297 | "kareem": "2.0.6", 298 | "lodash.get": "4.4.2", 299 | "mongodb": "3.0.6", 300 | "mongoose-legacy-pluralize": "1.0.2", 301 | "mpath": "0.4.1", 302 | "mquery": "3.0.0", 303 | "ms": "2.0.0", 304 | "regexp-clone": "0.0.1", 305 | "sliced": "1.0.1" 306 | } 307 | }, 308 | "mongoose-legacy-pluralize": { 309 | "version": "1.0.2", 310 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 311 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 312 | }, 313 | "mpath": { 314 | "version": "0.4.1", 315 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz", 316 | "integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA==" 317 | }, 318 | "mquery": { 319 | "version": "3.0.0", 320 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz", 321 | "integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==", 322 | "requires": { 323 | "bluebird": "3.5.0", 324 | "debug": "2.6.9", 325 | "regexp-clone": "0.0.1", 326 | "sliced": "0.0.5" 327 | }, 328 | "dependencies": { 329 | "sliced": { 330 | "version": "0.0.5", 331 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", 332 | "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" 333 | } 334 | } 335 | }, 336 | "ms": { 337 | "version": "2.0.0", 338 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 339 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 340 | }, 341 | "negotiator": { 342 | "version": "0.6.1", 343 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 344 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 345 | }, 346 | "on-finished": { 347 | "version": "2.3.0", 348 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 349 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 350 | "requires": { 351 | "ee-first": "1.1.1" 352 | } 353 | }, 354 | "parseurl": { 355 | "version": "1.3.2", 356 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 357 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 358 | }, 359 | "path-to-regexp": { 360 | "version": "0.1.7", 361 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 362 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 363 | }, 364 | "proxy-addr": { 365 | "version": "2.0.3", 366 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", 367 | "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", 368 | "requires": { 369 | "forwarded": "0.1.2", 370 | "ipaddr.js": "1.6.0" 371 | } 372 | }, 373 | "qs": { 374 | "version": "6.5.1", 375 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 376 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 377 | }, 378 | "range-parser": { 379 | "version": "1.2.0", 380 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 381 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 382 | }, 383 | "raw-body": { 384 | "version": "2.3.2", 385 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 386 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 387 | "requires": { 388 | "bytes": "3.0.0", 389 | "http-errors": "1.6.2", 390 | "iconv-lite": "0.4.19", 391 | "unpipe": "1.0.0" 392 | }, 393 | "dependencies": { 394 | "depd": { 395 | "version": "1.1.1", 396 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 397 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 398 | }, 399 | "http-errors": { 400 | "version": "1.6.2", 401 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 402 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 403 | "requires": { 404 | "depd": "1.1.1", 405 | "inherits": "2.0.3", 406 | "setprototypeof": "1.0.3", 407 | "statuses": "1.5.0" 408 | } 409 | }, 410 | "setprototypeof": { 411 | "version": "1.0.3", 412 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 413 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 414 | } 415 | } 416 | }, 417 | "regexp-clone": { 418 | "version": "0.0.1", 419 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", 420 | "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" 421 | }, 422 | "require_optional": { 423 | "version": "1.0.1", 424 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 425 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 426 | "requires": { 427 | "resolve-from": "2.0.0", 428 | "semver": "5.5.0" 429 | } 430 | }, 431 | "resolve-from": { 432 | "version": "2.0.0", 433 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 434 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 435 | }, 436 | "safe-buffer": { 437 | "version": "5.1.1", 438 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 439 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 440 | }, 441 | "semver": { 442 | "version": "5.5.0", 443 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 444 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 445 | }, 446 | "send": { 447 | "version": "0.16.2", 448 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 449 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 450 | "requires": { 451 | "debug": "2.6.9", 452 | "depd": "1.1.2", 453 | "destroy": "1.0.4", 454 | "encodeurl": "1.0.2", 455 | "escape-html": "1.0.3", 456 | "etag": "1.8.1", 457 | "fresh": "0.5.2", 458 | "http-errors": "1.6.3", 459 | "mime": "1.4.1", 460 | "ms": "2.0.0", 461 | "on-finished": "2.3.0", 462 | "range-parser": "1.2.0", 463 | "statuses": "1.4.0" 464 | }, 465 | "dependencies": { 466 | "statuses": { 467 | "version": "1.4.0", 468 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 469 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 470 | } 471 | } 472 | }, 473 | "serve-static": { 474 | "version": "1.13.2", 475 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 476 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 477 | "requires": { 478 | "encodeurl": "1.0.2", 479 | "escape-html": "1.0.3", 480 | "parseurl": "1.3.2", 481 | "send": "0.16.2" 482 | } 483 | }, 484 | "setprototypeof": { 485 | "version": "1.1.0", 486 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 487 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 488 | }, 489 | "sliced": { 490 | "version": "1.0.1", 491 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 492 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 493 | }, 494 | "statuses": { 495 | "version": "1.5.0", 496 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 497 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 498 | }, 499 | "type-is": { 500 | "version": "1.6.16", 501 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 502 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 503 | "requires": { 504 | "media-typer": "0.3.0", 505 | "mime-types": "2.1.18" 506 | } 507 | }, 508 | "unpipe": { 509 | "version": "1.0.0", 510 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 511 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 512 | }, 513 | "utils-merge": { 514 | "version": "1.0.1", 515 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 516 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 517 | }, 518 | "vary": { 519 | "version": "1.1.2", 520 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 521 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 522 | } 523 | } 524 | } 525 | -------------------------------------------------------------------------------- /express-todolist/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-todolist", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.18.2", 13 | "ejs": "^2.5.8", 14 | "express": "^4.16.3", 15 | "mongoose": "^5.0.15" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /express-todolist/public/assets/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | background: #0d1521; 3 | font-family: tahoma; 4 | color: #989898; 5 | } 6 | 7 | #todo-table { 8 | position: relative; 9 | width: 95%; 10 | background: #090d13; 11 | margin: 0 auto; 12 | padding: 20px; 13 | box-sizing: border-box; 14 | } 15 | 16 | #todo-table form:after { 17 | margin: 0; 18 | content: ''; 19 | display: block; 20 | clear: both; 21 | } 22 | 23 | input[type="text"] { 24 | width: 30%; 25 | padding: 20px; 26 | background: #181c22; 27 | border: 0; 28 | float: left; 29 | font-size: 20px; 30 | color: #989898; 31 | } 32 | 33 | button { 34 | padding: 20px; 35 | width: 30%; 36 | float: left; 37 | background: #23282e; 38 | border: 0; 39 | box-sizing: border-box; 40 | color: #fff; 41 | cursor: pointer; 42 | font-size: 20px; 43 | } 44 | 45 | ul { 46 | list-style-type: none; 47 | padding: 0; 48 | margin: 0; 49 | } 50 | 51 | li { 52 | width: 100%; 53 | padding: 20px; 54 | box-sizing: border-box; 55 | font-family: arial; 56 | font-size: 20px; 57 | cursor: pointer; 58 | letter-spacing: 1px; 59 | } 60 | 61 | li:hover { 62 | text-decoration: line-through; 63 | background: rgba(0, 0, 0, 0.2); 64 | } -------------------------------------------------------------------------------- /express-todolist/public/assets/todo-list.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | 3 | $('form').on('submit', function(event) { 4 | event.preventDefault(); 5 | var item = $('form input'); 6 | var todo = { item: item.val().trim() }; 7 | 8 | $.ajax({ 9 | type: 'POST', 10 | url: '/todo', 11 | data: todo, 12 | success: function(data) { 13 | //do something with the data via front-end framework 14 | location.reload(); 15 | } 16 | }); 17 | 18 | return false; 19 | 20 | }); 21 | 22 | $('li').on('click', function() { 23 | var item = $(this).text().trim().replace(/ /g, "-"); 24 | $.ajax({ 25 | type: 'DELETE', 26 | url: '/todo/' + item, 27 | success: function(data) { 28 | //do something with the data via front-end framework 29 | location.reload(); 30 | } 31 | }); 32 | }); 33 | 34 | }); -------------------------------------------------------------------------------- /express-todolist/views/todo.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Todo list 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 | 21 |
22 | 23 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/README.md: -------------------------------------------------------------------------------- 1 | Nodejs + Express + MongoDB 电影网站 2 | 3 | 1.开发框架介绍: 4 | 5 | 数据库 mongoDB 以及快速建模的工具mongoose 6 | 7 | 模板引擎:jade 8 | 9 | 时间和日期的格式化: Moment.js 10 | 11 | 2.前端: 12 | 13 | jQuery 类库 14 | 15 | Bootstrap 样式框架 16 | 17 | Bower 18 | 19 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express') 2 | var path = require('path') 3 | var mongoose = require('mongoose') 4 | var _ = require('underscore') 5 | var Movie = require('./models/movie.js') 6 | var bodyParser = require('body-parser') 7 | var port = process.env.PORT || 3000 // 设置端口号:3000 8 | var app = express() 9 | 10 | mongoose.connect('mongodb://localhost/imooc')// 连接mongodb本地数据库imooc 11 | 12 | app.set('views','./views/pages') // 设置视图根目录 13 | app.set('view engine','jade') // 设置默认模板引擎:jade 14 | app.use(bodyParser.urlencoded({extended:true})) //bodyParser能够将表单数据进行格式化 15 | // app.use(bodyParser.urlencoded({extended:false})) 16 | // app.use(bodyParser.json()); 17 | app.use(express.static(path.join(__dirname,'public')))// 设置路径:public 18 | app.locals.moment = require('moment')// 载入moment模块,格式化日期 19 | app.listen(port) 20 | 21 | console.log('nodejs movies started on port ' + port) 22 | 23 | // index page 24 | app.get('/',function(req,res){ 25 | Movie.fetch(function(err,movies){ 26 | if(err){ 27 | console.log(err) 28 | } 29 | res.render('index',{ 30 | title: 'imooc 首页', 31 | movies: movies 32 | }) 33 | }) 34 | }) 35 | 36 | // detail page 37 | // /:id 表示可以在req.params中拿到id的值 38 | app.get('/movie/:id',function(req,res){ 39 | var id = req.params.id 40 | 41 | Movie.findById(id,function(err,movie){ 42 | res.render('detail',{ 43 | // title: 'imooc 详情页', 44 | title: 'imooc ' + movie.title, 45 | movie: movie 46 | }) 47 | }) 48 | }) 49 | 50 | // admin page 51 | app.get('/admin/movie',function(req,res){ 52 | res.render('admin',{ 53 | title: 'imooc 后台录入页', 54 | movie: { 55 | title: '', 56 | doctor: '', 57 | country: '', 58 | year: '', 59 | poster: '', 60 | flash: '', 61 | summary: '', 62 | language: '' 63 | } 64 | }) 65 | }) 66 | 67 | // admin update movie 68 | app.get('/admin/update/:id',function(req,res){ 69 | var id = req.params.id 70 | 71 | if(id){ 72 | Movie.findById(id,function(err,movie){ 73 | res.render('admin',{ 74 | title:'imooc 后台更新页', 75 | movie:movie 76 | }) 77 | }) 78 | } 79 | }) 80 | 81 | // admin post movie 82 | app.post('/admin/movie/new',function(req,res){ 83 | var id = req.body.movie._id 84 | var movieObj = req.body.movie 85 | var _movie 86 | // 声明_movie变量 87 | 88 | if(id !== 'undefined'){ 89 | Movie.findById(id,function(err,movie){ 90 | if(err){ 91 | console.log(err) 92 | } 93 | 94 | _movie = _.extend(movie,movieObj) // _.extend用新对象里的字段替换老的字段 95 | _movie.save(function(err,movie){ 96 | if(err){ 97 | console.log(err) 98 | } 99 | res.redirect('/movie/' + movie._id) 100 | }) 101 | }) 102 | } 103 | else{ 104 | _movie = new Movie({ 105 | doctor:movieObj.doctor, 106 | title:movieObj.title, 107 | country:movieObj.country, 108 | language:movieObj.language, 109 | year:movieObj.year, 110 | poster:movieObj.poster, 111 | summary:movieObj.summary, 112 | flash:movieObj.flash 113 | }) 114 | 115 | _movie.save(function(err,movie){ 116 | if(err){ 117 | console.log(err) 118 | } 119 | res.redirect('/movie/' + movie._id) 120 | }) 121 | } 122 | }) 123 | 124 | 125 | 126 | // list page 127 | app.get('/admin/list',function(req,res){ 128 | Movie.fetch(function(err,movies){ 129 | if(err){ 130 | console.log(err) 131 | } 132 | res.render('list',{ 133 | title: 'imooc 列表页', 134 | movies: movies 135 | }) 136 | }) 137 | }) 138 | 139 | // list delete movie 140 | app.delete('/admin/list',function(req,res){ 141 | var id = req.query.id 142 | 143 | if(id){ 144 | Movie.remove({_id: id},function(err,movie){ 145 | if(err){ 146 | console.log(err) 147 | } 148 | else{ 149 | res.json({success: 1}) 150 | } 151 | }) 152 | } 153 | }) -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nodejs+express+mongodb", 3 | "description": "nodejs movie", 4 | "main": "index.js", 5 | "authors": [ 6 | "vito woo" 7 | ], 8 | "license": "MIT", 9 | "keywords": [ 10 | "nodejs", 11 | "express", 12 | "mongoda" 13 | ], 14 | "homepage": "", 15 | "private": true, 16 | "ignore": [ 17 | "**/.*", 18 | "node_modules", 19 | "bower_components", 20 | "public/libs", 21 | "test", 22 | "tests" 23 | ], 24 | "dependencies": { 25 | "bootstrap": "3.1.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/models/movie.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | var MovieSchema = require('../schemas/movie') 3 | var Movie = mongoose.model('Movie',MovieSchema) 4 | 5 | module.exports = Movie 6 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imooc-express", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "acorn": { 17 | "version": "2.7.0", 18 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", 19 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" 20 | }, 21 | "acorn-globals": { 22 | "version": "1.0.9", 23 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", 24 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", 25 | "requires": { 26 | "acorn": "2.7.0" 27 | } 28 | }, 29 | "align-text": { 30 | "version": "0.1.4", 31 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 32 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 33 | "requires": { 34 | "kind-of": "3.2.2", 35 | "longest": "1.0.1", 36 | "repeat-string": "1.6.1" 37 | } 38 | }, 39 | "amdefine": { 40 | "version": "1.0.1", 41 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 42 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" 43 | }, 44 | "array-flatten": { 45 | "version": "1.1.1", 46 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 47 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 48 | }, 49 | "asap": { 50 | "version": "1.0.0", 51 | "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", 52 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" 53 | }, 54 | "async": { 55 | "version": "2.1.4", 56 | "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", 57 | "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", 58 | "requires": { 59 | "lodash": "4.17.5" 60 | } 61 | }, 62 | "bluebird": { 63 | "version": "3.5.0", 64 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 65 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" 66 | }, 67 | "body-parser": { 68 | "version": "1.18.2", 69 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 70 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 71 | "requires": { 72 | "bytes": "3.0.0", 73 | "content-type": "1.0.4", 74 | "debug": "2.6.9", 75 | "depd": "1.1.2", 76 | "http-errors": "1.6.3", 77 | "iconv-lite": "0.4.19", 78 | "on-finished": "2.3.0", 79 | "qs": "6.5.1", 80 | "raw-body": "2.3.2", 81 | "type-is": "1.6.16" 82 | } 83 | }, 84 | "bson": { 85 | "version": "1.0.6", 86 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.6.tgz", 87 | "integrity": "sha512-D8zmlb46xfuK2gGvKmUjIklQEouN2nQ0LEHHeZ/NoHM2LDiMk2EYzZ5Ntw/Urk+bgMDosOZxaRzXxvhI5TcAVQ==" 88 | }, 89 | "bytes": { 90 | "version": "3.0.0", 91 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 92 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 93 | }, 94 | "camelcase": { 95 | "version": "1.2.1", 96 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 97 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 98 | }, 99 | "center-align": { 100 | "version": "0.1.3", 101 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 102 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 103 | "requires": { 104 | "align-text": "0.1.4", 105 | "lazy-cache": "1.0.4" 106 | } 107 | }, 108 | "character-parser": { 109 | "version": "1.2.1", 110 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", 111 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" 112 | }, 113 | "clean-css": { 114 | "version": "3.4.28", 115 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", 116 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", 117 | "requires": { 118 | "commander": "2.8.1", 119 | "source-map": "0.4.4" 120 | }, 121 | "dependencies": { 122 | "commander": { 123 | "version": "2.8.1", 124 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", 125 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", 126 | "requires": { 127 | "graceful-readlink": "1.0.1" 128 | } 129 | } 130 | } 131 | }, 132 | "cliui": { 133 | "version": "2.1.0", 134 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 135 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 136 | "requires": { 137 | "center-align": "0.1.3", 138 | "right-align": "0.1.3", 139 | "wordwrap": "0.0.2" 140 | }, 141 | "dependencies": { 142 | "wordwrap": { 143 | "version": "0.0.2", 144 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 145 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 146 | } 147 | } 148 | }, 149 | "commander": { 150 | "version": "2.6.0", 151 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", 152 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" 153 | }, 154 | "constantinople": { 155 | "version": "3.0.2", 156 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", 157 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", 158 | "requires": { 159 | "acorn": "2.7.0" 160 | } 161 | }, 162 | "content-disposition": { 163 | "version": "0.5.2", 164 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 165 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 166 | }, 167 | "content-type": { 168 | "version": "1.0.4", 169 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 170 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 171 | }, 172 | "cookie": { 173 | "version": "0.3.1", 174 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 175 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 176 | }, 177 | "cookie-signature": { 178 | "version": "1.0.6", 179 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 180 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 181 | }, 182 | "css": { 183 | "version": "1.0.8", 184 | "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", 185 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", 186 | "requires": { 187 | "css-parse": "1.0.4", 188 | "css-stringify": "1.0.5" 189 | } 190 | }, 191 | "css-parse": { 192 | "version": "1.0.4", 193 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", 194 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" 195 | }, 196 | "css-stringify": { 197 | "version": "1.0.5", 198 | "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", 199 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" 200 | }, 201 | "debug": { 202 | "version": "2.6.9", 203 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 204 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 205 | "requires": { 206 | "ms": "2.0.0" 207 | } 208 | }, 209 | "decamelize": { 210 | "version": "1.2.0", 211 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 212 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 213 | }, 214 | "depd": { 215 | "version": "1.1.2", 216 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 217 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 218 | }, 219 | "destroy": { 220 | "version": "1.0.4", 221 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 222 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 223 | }, 224 | "doctypes": { 225 | "version": "1.1.0", 226 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 227 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" 228 | }, 229 | "ee-first": { 230 | "version": "1.1.1", 231 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 232 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 233 | }, 234 | "encodeurl": { 235 | "version": "1.0.2", 236 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 237 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 238 | }, 239 | "escape-html": { 240 | "version": "1.0.3", 241 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 242 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 243 | }, 244 | "etag": { 245 | "version": "1.8.1", 246 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 247 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 248 | }, 249 | "express": { 250 | "version": "4.16.3", 251 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 252 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 253 | "requires": { 254 | "accepts": "1.3.5", 255 | "array-flatten": "1.1.1", 256 | "body-parser": "1.18.2", 257 | "content-disposition": "0.5.2", 258 | "content-type": "1.0.4", 259 | "cookie": "0.3.1", 260 | "cookie-signature": "1.0.6", 261 | "debug": "2.6.9", 262 | "depd": "1.1.2", 263 | "encodeurl": "1.0.2", 264 | "escape-html": "1.0.3", 265 | "etag": "1.8.1", 266 | "finalhandler": "1.1.1", 267 | "fresh": "0.5.2", 268 | "merge-descriptors": "1.0.1", 269 | "methods": "1.1.2", 270 | "on-finished": "2.3.0", 271 | "parseurl": "1.3.2", 272 | "path-to-regexp": "0.1.7", 273 | "proxy-addr": "2.0.3", 274 | "qs": "6.5.1", 275 | "range-parser": "1.2.0", 276 | "safe-buffer": "5.1.1", 277 | "send": "0.16.2", 278 | "serve-static": "1.13.2", 279 | "setprototypeof": "1.1.0", 280 | "statuses": "1.4.0", 281 | "type-is": "1.6.16", 282 | "utils-merge": "1.0.1", 283 | "vary": "1.1.2" 284 | } 285 | }, 286 | "finalhandler": { 287 | "version": "1.1.1", 288 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 289 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 290 | "requires": { 291 | "debug": "2.6.9", 292 | "encodeurl": "1.0.2", 293 | "escape-html": "1.0.3", 294 | "on-finished": "2.3.0", 295 | "parseurl": "1.3.2", 296 | "statuses": "1.4.0", 297 | "unpipe": "1.0.0" 298 | } 299 | }, 300 | "forwarded": { 301 | "version": "0.1.2", 302 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 303 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 304 | }, 305 | "fresh": { 306 | "version": "0.5.2", 307 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 308 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 309 | }, 310 | "function-bind": { 311 | "version": "1.1.1", 312 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 313 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 314 | }, 315 | "graceful-readlink": { 316 | "version": "1.0.1", 317 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 318 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 319 | }, 320 | "has": { 321 | "version": "1.0.1", 322 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 323 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 324 | "requires": { 325 | "function-bind": "1.1.1" 326 | } 327 | }, 328 | "http-errors": { 329 | "version": "1.6.3", 330 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 331 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 332 | "requires": { 333 | "depd": "1.1.2", 334 | "inherits": "2.0.3", 335 | "setprototypeof": "1.1.0", 336 | "statuses": "1.4.0" 337 | } 338 | }, 339 | "iconv-lite": { 340 | "version": "0.4.19", 341 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 342 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 343 | }, 344 | "inherits": { 345 | "version": "2.0.3", 346 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 347 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 348 | }, 349 | "ipaddr.js": { 350 | "version": "1.6.0", 351 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", 352 | "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" 353 | }, 354 | "is-buffer": { 355 | "version": "1.1.6", 356 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 357 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 358 | }, 359 | "is-expression": { 360 | "version": "3.0.0", 361 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", 362 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", 363 | "requires": { 364 | "acorn": "4.0.13", 365 | "object-assign": "4.1.1" 366 | }, 367 | "dependencies": { 368 | "acorn": { 369 | "version": "4.0.13", 370 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 371 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 372 | } 373 | } 374 | }, 375 | "is-promise": { 376 | "version": "2.1.0", 377 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 378 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 379 | }, 380 | "is-regex": { 381 | "version": "1.0.4", 382 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 383 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 384 | "requires": { 385 | "has": "1.0.1" 386 | } 387 | }, 388 | "jade": { 389 | "version": "1.11.0", 390 | "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", 391 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", 392 | "requires": { 393 | "character-parser": "1.2.1", 394 | "clean-css": "3.4.28", 395 | "commander": "2.6.0", 396 | "constantinople": "3.0.2", 397 | "jstransformer": "0.0.2", 398 | "mkdirp": "0.5.1", 399 | "transformers": "2.1.0", 400 | "uglify-js": "2.8.29", 401 | "void-elements": "2.0.1", 402 | "with": "4.0.3" 403 | } 404 | }, 405 | "js-stringify": { 406 | "version": "1.0.2", 407 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 408 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" 409 | }, 410 | "jstransformer": { 411 | "version": "0.0.2", 412 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", 413 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", 414 | "requires": { 415 | "is-promise": "2.1.0", 416 | "promise": "6.1.0" 417 | } 418 | }, 419 | "kareem": { 420 | "version": "2.0.6", 421 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.6.tgz", 422 | "integrity": "sha512-/C+l8gABdHsAIfNpykJNWmYodpTnDRyn+JhORkP2VgEf1GgdAc+oTHjVADwISwCJKta031EOIwY6+Hki5z8SpQ==" 423 | }, 424 | "kind-of": { 425 | "version": "3.2.2", 426 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 427 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 428 | "requires": { 429 | "is-buffer": "1.1.6" 430 | } 431 | }, 432 | "lazy-cache": { 433 | "version": "1.0.4", 434 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 435 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 436 | }, 437 | "lodash": { 438 | "version": "4.17.5", 439 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", 440 | "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" 441 | }, 442 | "lodash.get": { 443 | "version": "4.4.2", 444 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", 445 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" 446 | }, 447 | "longest": { 448 | "version": "1.0.1", 449 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 450 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 451 | }, 452 | "media-typer": { 453 | "version": "0.3.0", 454 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 455 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 456 | }, 457 | "merge-descriptors": { 458 | "version": "1.0.1", 459 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 460 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 461 | }, 462 | "methods": { 463 | "version": "1.1.2", 464 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 465 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 466 | }, 467 | "mime": { 468 | "version": "1.4.1", 469 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 470 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 471 | }, 472 | "mime-db": { 473 | "version": "1.33.0", 474 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 475 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 476 | }, 477 | "mime-types": { 478 | "version": "2.1.18", 479 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 480 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 481 | "requires": { 482 | "mime-db": "1.33.0" 483 | } 484 | }, 485 | "minimist": { 486 | "version": "0.0.8", 487 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 488 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 489 | }, 490 | "mkdirp": { 491 | "version": "0.5.1", 492 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 493 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 494 | "requires": { 495 | "minimist": "0.0.8" 496 | } 497 | }, 498 | "moment": { 499 | "version": "2.22.1", 500 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", 501 | "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" 502 | }, 503 | "mongodb": { 504 | "version": "3.0.6", 505 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.6.tgz", 506 | "integrity": "sha512-nEg7SnzcyobArDTXEqvI1BasY6Z45h1lyBtVMCS9gRTkbtwrDn6WcLRa+MVRYufrJXxQPkAiYJQ94eCUzit0EQ==", 507 | "requires": { 508 | "mongodb-core": "3.0.6" 509 | } 510 | }, 511 | "mongodb-core": { 512 | "version": "3.0.6", 513 | "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.6.tgz", 514 | "integrity": "sha512-EIaEyA4DEft4je4Hfa+CDswKdFhlev9V9o5KJo/nITgG6KNKz5Rxg5ZuMGEjGkMwFkydFQ3Kz0CxZ18AXhRrEg==", 515 | "requires": { 516 | "bson": "1.0.6", 517 | "require_optional": "1.0.1" 518 | } 519 | }, 520 | "mongoose": { 521 | "version": "5.0.15", 522 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.15.tgz", 523 | "integrity": "sha512-S37I7V8nZE7JgPExgqb7zOKqezhvQP3JNa60rQEfVESvPkuan2gk/KoYeww7UK/gkKii8mR7OLyuzfRTa7rxxQ==", 524 | "requires": { 525 | "async": "2.1.4", 526 | "bson": "1.0.6", 527 | "kareem": "2.0.6", 528 | "lodash.get": "4.4.2", 529 | "mongodb": "3.0.6", 530 | "mongoose-legacy-pluralize": "1.0.2", 531 | "mpath": "0.4.1", 532 | "mquery": "3.0.0", 533 | "ms": "2.0.0", 534 | "regexp-clone": "0.0.1", 535 | "sliced": "1.0.1" 536 | } 537 | }, 538 | "mongoose-legacy-pluralize": { 539 | "version": "1.0.2", 540 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", 541 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" 542 | }, 543 | "mpath": { 544 | "version": "0.4.1", 545 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.4.1.tgz", 546 | "integrity": "sha512-NNY/MpBkALb9jJmjpBlIi6GRoLveLUM0pJzgbp9vY9F7IQEb/HREC/nxrixechcQwd1NevOhJnWWV8QQQRE+OA==" 547 | }, 548 | "mquery": { 549 | "version": "3.0.0", 550 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz", 551 | "integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==", 552 | "requires": { 553 | "bluebird": "3.5.0", 554 | "debug": "2.6.9", 555 | "regexp-clone": "0.0.1", 556 | "sliced": "0.0.5" 557 | }, 558 | "dependencies": { 559 | "sliced": { 560 | "version": "0.0.5", 561 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", 562 | "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" 563 | } 564 | } 565 | }, 566 | "ms": { 567 | "version": "2.0.0", 568 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 569 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 570 | }, 571 | "negotiator": { 572 | "version": "0.6.1", 573 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 574 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 575 | }, 576 | "object-assign": { 577 | "version": "4.1.1", 578 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 579 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 580 | }, 581 | "on-finished": { 582 | "version": "2.3.0", 583 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 584 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 585 | "requires": { 586 | "ee-first": "1.1.1" 587 | } 588 | }, 589 | "optimist": { 590 | "version": "0.3.7", 591 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 592 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", 593 | "requires": { 594 | "wordwrap": "0.0.3" 595 | } 596 | }, 597 | "parseurl": { 598 | "version": "1.3.2", 599 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 600 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 601 | }, 602 | "path-parse": { 603 | "version": "1.0.5", 604 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 605 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" 606 | }, 607 | "path-to-regexp": { 608 | "version": "0.1.7", 609 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 610 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 611 | }, 612 | "promise": { 613 | "version": "6.1.0", 614 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", 615 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", 616 | "requires": { 617 | "asap": "1.0.0" 618 | } 619 | }, 620 | "proxy-addr": { 621 | "version": "2.0.3", 622 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", 623 | "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", 624 | "requires": { 625 | "forwarded": "0.1.2", 626 | "ipaddr.js": "1.6.0" 627 | } 628 | }, 629 | "pug": { 630 | "version": "2.0.3", 631 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", 632 | "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", 633 | "requires": { 634 | "pug-code-gen": "2.0.1", 635 | "pug-filters": "3.1.0", 636 | "pug-lexer": "4.0.0", 637 | "pug-linker": "3.0.5", 638 | "pug-load": "2.0.11", 639 | "pug-parser": "5.0.0", 640 | "pug-runtime": "2.0.4", 641 | "pug-strip-comments": "1.0.3" 642 | } 643 | }, 644 | "pug-attrs": { 645 | "version": "2.0.3", 646 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", 647 | "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", 648 | "requires": { 649 | "constantinople": "3.0.2", 650 | "js-stringify": "1.0.2", 651 | "pug-runtime": "2.0.4" 652 | } 653 | }, 654 | "pug-code-gen": { 655 | "version": "2.0.1", 656 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", 657 | "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", 658 | "requires": { 659 | "constantinople": "3.0.2", 660 | "doctypes": "1.1.0", 661 | "js-stringify": "1.0.2", 662 | "pug-attrs": "2.0.3", 663 | "pug-error": "1.3.2", 664 | "pug-runtime": "2.0.4", 665 | "void-elements": "2.0.1", 666 | "with": "5.1.1" 667 | }, 668 | "dependencies": { 669 | "acorn": { 670 | "version": "3.3.0", 671 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 672 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" 673 | }, 674 | "acorn-globals": { 675 | "version": "3.1.0", 676 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 677 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 678 | "requires": { 679 | "acorn": "4.0.13" 680 | }, 681 | "dependencies": { 682 | "acorn": { 683 | "version": "4.0.13", 684 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 685 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 686 | } 687 | } 688 | }, 689 | "with": { 690 | "version": "5.1.1", 691 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", 692 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", 693 | "requires": { 694 | "acorn": "3.3.0", 695 | "acorn-globals": "3.1.0" 696 | } 697 | } 698 | } 699 | }, 700 | "pug-error": { 701 | "version": "1.3.2", 702 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", 703 | "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" 704 | }, 705 | "pug-filters": { 706 | "version": "3.1.0", 707 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", 708 | "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", 709 | "requires": { 710 | "clean-css": "4.1.11", 711 | "constantinople": "3.0.2", 712 | "jstransformer": "1.0.0", 713 | "pug-error": "1.3.2", 714 | "pug-walk": "1.1.7", 715 | "resolve": "1.7.1", 716 | "uglify-js": "2.8.29" 717 | }, 718 | "dependencies": { 719 | "asap": { 720 | "version": "2.0.6", 721 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 722 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 723 | }, 724 | "clean-css": { 725 | "version": "4.1.11", 726 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", 727 | "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", 728 | "requires": { 729 | "source-map": "0.5.7" 730 | } 731 | }, 732 | "jstransformer": { 733 | "version": "1.0.0", 734 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 735 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 736 | "requires": { 737 | "is-promise": "2.1.0", 738 | "promise": "7.3.1" 739 | } 740 | }, 741 | "promise": { 742 | "version": "7.3.1", 743 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 744 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 745 | "requires": { 746 | "asap": "2.0.6" 747 | } 748 | }, 749 | "source-map": { 750 | "version": "0.5.7", 751 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 752 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 753 | } 754 | } 755 | }, 756 | "pug-lexer": { 757 | "version": "4.0.0", 758 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", 759 | "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", 760 | "requires": { 761 | "character-parser": "2.2.0", 762 | "is-expression": "3.0.0", 763 | "pug-error": "1.3.2" 764 | }, 765 | "dependencies": { 766 | "character-parser": { 767 | "version": "2.2.0", 768 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 769 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 770 | "requires": { 771 | "is-regex": "1.0.4" 772 | } 773 | } 774 | } 775 | }, 776 | "pug-linker": { 777 | "version": "3.0.5", 778 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", 779 | "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", 780 | "requires": { 781 | "pug-error": "1.3.2", 782 | "pug-walk": "1.1.7" 783 | } 784 | }, 785 | "pug-load": { 786 | "version": "2.0.11", 787 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", 788 | "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", 789 | "requires": { 790 | "object-assign": "4.1.1", 791 | "pug-walk": "1.1.7" 792 | } 793 | }, 794 | "pug-parser": { 795 | "version": "5.0.0", 796 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", 797 | "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", 798 | "requires": { 799 | "pug-error": "1.3.2", 800 | "token-stream": "0.0.1" 801 | } 802 | }, 803 | "pug-runtime": { 804 | "version": "2.0.4", 805 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", 806 | "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" 807 | }, 808 | "pug-strip-comments": { 809 | "version": "1.0.3", 810 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", 811 | "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", 812 | "requires": { 813 | "pug-error": "1.3.2" 814 | } 815 | }, 816 | "pug-walk": { 817 | "version": "1.1.7", 818 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", 819 | "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" 820 | }, 821 | "qs": { 822 | "version": "6.5.1", 823 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 824 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 825 | }, 826 | "range-parser": { 827 | "version": "1.2.0", 828 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 829 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 830 | }, 831 | "raw-body": { 832 | "version": "2.3.2", 833 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 834 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 835 | "requires": { 836 | "bytes": "3.0.0", 837 | "http-errors": "1.6.2", 838 | "iconv-lite": "0.4.19", 839 | "unpipe": "1.0.0" 840 | }, 841 | "dependencies": { 842 | "depd": { 843 | "version": "1.1.1", 844 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 845 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 846 | }, 847 | "http-errors": { 848 | "version": "1.6.2", 849 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 850 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 851 | "requires": { 852 | "depd": "1.1.1", 853 | "inherits": "2.0.3", 854 | "setprototypeof": "1.0.3", 855 | "statuses": "1.4.0" 856 | } 857 | }, 858 | "setprototypeof": { 859 | "version": "1.0.3", 860 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 861 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 862 | } 863 | } 864 | }, 865 | "regexp-clone": { 866 | "version": "0.0.1", 867 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", 868 | "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" 869 | }, 870 | "repeat-string": { 871 | "version": "1.6.1", 872 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 873 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 874 | }, 875 | "require_optional": { 876 | "version": "1.0.1", 877 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", 878 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", 879 | "requires": { 880 | "resolve-from": "2.0.0", 881 | "semver": "5.5.0" 882 | } 883 | }, 884 | "resolve": { 885 | "version": "1.7.1", 886 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", 887 | "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", 888 | "requires": { 889 | "path-parse": "1.0.5" 890 | } 891 | }, 892 | "resolve-from": { 893 | "version": "2.0.0", 894 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", 895 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" 896 | }, 897 | "right-align": { 898 | "version": "0.1.3", 899 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 900 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 901 | "requires": { 902 | "align-text": "0.1.4" 903 | } 904 | }, 905 | "safe-buffer": { 906 | "version": "5.1.1", 907 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 908 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 909 | }, 910 | "semver": { 911 | "version": "5.5.0", 912 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 913 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 914 | }, 915 | "send": { 916 | "version": "0.16.2", 917 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 918 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 919 | "requires": { 920 | "debug": "2.6.9", 921 | "depd": "1.1.2", 922 | "destroy": "1.0.4", 923 | "encodeurl": "1.0.2", 924 | "escape-html": "1.0.3", 925 | "etag": "1.8.1", 926 | "fresh": "0.5.2", 927 | "http-errors": "1.6.3", 928 | "mime": "1.4.1", 929 | "ms": "2.0.0", 930 | "on-finished": "2.3.0", 931 | "range-parser": "1.2.0", 932 | "statuses": "1.4.0" 933 | } 934 | }, 935 | "serve-static": { 936 | "version": "1.13.2", 937 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 938 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 939 | "requires": { 940 | "encodeurl": "1.0.2", 941 | "escape-html": "1.0.3", 942 | "parseurl": "1.3.2", 943 | "send": "0.16.2" 944 | } 945 | }, 946 | "setprototypeof": { 947 | "version": "1.1.0", 948 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 949 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 950 | }, 951 | "sliced": { 952 | "version": "1.0.1", 953 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 954 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 955 | }, 956 | "source-map": { 957 | "version": "0.4.4", 958 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 959 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 960 | "requires": { 961 | "amdefine": "1.0.1" 962 | } 963 | }, 964 | "statuses": { 965 | "version": "1.4.0", 966 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 967 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 968 | }, 969 | "token-stream": { 970 | "version": "0.0.1", 971 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", 972 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" 973 | }, 974 | "transformers": { 975 | "version": "2.1.0", 976 | "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", 977 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", 978 | "requires": { 979 | "css": "1.0.8", 980 | "promise": "2.0.0", 981 | "uglify-js": "2.2.5" 982 | }, 983 | "dependencies": { 984 | "is-promise": { 985 | "version": "1.0.1", 986 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", 987 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" 988 | }, 989 | "promise": { 990 | "version": "2.0.0", 991 | "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", 992 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", 993 | "requires": { 994 | "is-promise": "1.0.1" 995 | } 996 | }, 997 | "source-map": { 998 | "version": "0.1.43", 999 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 1000 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 1001 | "requires": { 1002 | "amdefine": "1.0.1" 1003 | } 1004 | }, 1005 | "uglify-js": { 1006 | "version": "2.2.5", 1007 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", 1008 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", 1009 | "requires": { 1010 | "optimist": "0.3.7", 1011 | "source-map": "0.1.43" 1012 | } 1013 | } 1014 | } 1015 | }, 1016 | "type-is": { 1017 | "version": "1.6.16", 1018 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 1019 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 1020 | "requires": { 1021 | "media-typer": "0.3.0", 1022 | "mime-types": "2.1.18" 1023 | } 1024 | }, 1025 | "uglify-js": { 1026 | "version": "2.8.29", 1027 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 1028 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 1029 | "requires": { 1030 | "source-map": "0.5.7", 1031 | "uglify-to-browserify": "1.0.2", 1032 | "yargs": "3.10.0" 1033 | }, 1034 | "dependencies": { 1035 | "source-map": { 1036 | "version": "0.5.7", 1037 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1038 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1039 | } 1040 | } 1041 | }, 1042 | "uglify-to-browserify": { 1043 | "version": "1.0.2", 1044 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 1045 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 1046 | "optional": true 1047 | }, 1048 | "underscore": { 1049 | "version": "1.9.0", 1050 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.0.tgz", 1051 | "integrity": "sha512-4IV1DSSxC1QK48j9ONFK1MoIAKKkbE8i7u55w2R6IqBqbT7A/iG7aZBCR2Bi8piF0Uz+i/MG1aeqLwl/5vqF+A==" 1052 | }, 1053 | "unpipe": { 1054 | "version": "1.0.0", 1055 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1056 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1057 | }, 1058 | "utils-merge": { 1059 | "version": "1.0.1", 1060 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1061 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1062 | }, 1063 | "vary": { 1064 | "version": "1.1.2", 1065 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1066 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1067 | }, 1068 | "void-elements": { 1069 | "version": "2.0.1", 1070 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 1071 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 1072 | }, 1073 | "window-size": { 1074 | "version": "0.1.0", 1075 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 1076 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 1077 | }, 1078 | "with": { 1079 | "version": "4.0.3", 1080 | "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", 1081 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", 1082 | "requires": { 1083 | "acorn": "1.2.2", 1084 | "acorn-globals": "1.0.9" 1085 | }, 1086 | "dependencies": { 1087 | "acorn": { 1088 | "version": "1.2.2", 1089 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 1090 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" 1091 | } 1092 | } 1093 | }, 1094 | "wordwrap": { 1095 | "version": "0.0.3", 1096 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 1097 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 1098 | }, 1099 | "yargs": { 1100 | "version": "3.10.0", 1101 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 1102 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 1103 | "requires": { 1104 | "camelcase": "1.2.1", 1105 | "cliui": "2.1.0", 1106 | "decamelize": "1.2.0", 1107 | "window-size": "0.1.0" 1108 | } 1109 | } 1110 | } 1111 | } 1112 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imooc-express", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "vito woo", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.18.2", 13 | "express": "^4.16.3", 14 | "jade": "^1.11.0", 15 | "moment": "^2.22.1", 16 | "mongoose": "^5.0.15", 17 | "pug": "^2.0.3", 18 | "underscore": "^1.9.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/public/js/admin.js: -------------------------------------------------------------------------------- 1 | $(function(){ 2 | $('.del').click(function(e){ 3 | var target = $(e.target) 4 | var id = target.data('id') 5 | var tr = $('.item-id-' + id) 6 | 7 | $.ajax({ 8 | type:'DELETE', 9 | url:'/admin/list?id=' + id 10 | }) 11 | .done(function(results){ 12 | if(results.success === 1){ 13 | if(tr.length > 0){ 14 | tr.remove() 15 | } 16 | } 17 | }) 18 | }) 19 | }) -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/schemas/movie.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose') 2 | 3 | var MovieSchema = new mongoose.Schema({ 4 | doctor: String, 5 | title: String, 6 | language: String, 7 | country: String, 8 | summary: String, 9 | flash: String, 10 | poster: String, 11 | year: Number, 12 | meta: { 13 | createAt: { 14 | type: Date, 15 | default: Date.now() 16 | }, 17 | updateAt: { 18 | type: Date, 19 | default: Date.now() 20 | } 21 | } 22 | }) 23 | 24 | // 模式的pre方法表示每次save操作之前都会先调用这个方法, 判断数据是否新加的 25 | MovieSchema.pre('save',function(next){ 26 | if(this.isNew){ 27 | this.meta.createAt = this.meta.updateAt = Date.now() 28 | } 29 | else{ 30 | this.meta.updateAt = Date.now() 31 | } 32 | next() 33 | }) 34 | 35 | // 静态方法 ,不会与数据库直接进行交互,只有经过model实例化后才有这方法 36 | // fetch方法取出目前数据库所有的数据 37 | // findById方法用来查询单条数据 38 | MovieSchema.statics = { 39 | fetch:function(cb){ 40 | return this 41 | .find({}) 42 | .sort('meta.updateAt') 43 | .exec(cb) 44 | }, 45 | findById:function(id,cb){ 46 | return this 47 | .findOne({_id:id}) 48 | .exec(cb) 49 | } 50 | } 51 | 52 | // 将模式导出 53 | module.exports = MovieSchema -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/includes/head.jade: -------------------------------------------------------------------------------- 1 | link(href="/libs/bootstrap/dist/css/bootstrap.min.css", rel="stylesheet") 2 | script(src="/libs/jquery/dist/jquery.min.js") 3 | script(src="/libs/bootstrap/dist/js/bootstrap.min.js") -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/includes/header.jade: -------------------------------------------------------------------------------- 1 | .container 2 | .row 3 | .page-header 4 | h1= title 5 | small 重度科幻迷 -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype 2 | html 3 | head 4 | meta(charset='utf-8') 5 | title #{title} 6 | include ./includes/head 7 | body 8 | include ./includes/header 9 | block content -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/pages/admin.jade: -------------------------------------------------------------------------------- 1 | extends ../layout 2 | 3 | block content 4 | .container 5 | .row 6 | form.form-horizontal(method="post", action="/admin/movie/new") 7 | input(type="hidden", name="movie[_id]", value="#{movie._id}") 8 | //- 隐藏表单域,用来更新电影数据,存储电影ID 9 | .form-group 10 | label.col-sm-2.control-label(for="inputTitle") 电影名称 11 | .col-sm-10 12 | input#inputTitle.form-control(type="text", name="movie[title]", value="#{movie.title}") 13 | .form-group 14 | label.col-sm-2.control-label(for="inputDoctor") 电影导演 15 | .col-sm-10 16 | input#inputDoctor.form-control(type="text", name="movie[doctor]", value="#{movie.doctor}") 17 | .form-group 18 | label.col-sm-2.control-label(for="inputCountry") 国家 19 | .col-sm-10 20 | input#inputCountry.form-control(type="text", name="movie[country]", value="#{movie.country}") 21 | .form-group 22 | label.col-sm-2.control-label(for="inputLanguage") 语种 23 | .col-sm-10 24 | input#inputLanguage.form-control(type="text", name="movie[language]", value="#{movie.language}") 25 | .form-group 26 | label.col-sm-2.control-label(for="inputPoster") 海报地址 27 | .col-sm-10 28 | input#inputPoster.form-control(type="text", name="movie[poster]", value="#{movie.poster}") 29 | .form-group 30 | label.col-sm-2.control-label(for="inputFlash") 片源地址 31 | .col-sm-10 32 | input#inputFlash.form-control(type="text", name="movie[flash]", value="#{movie.flash}") 33 | .form-group 34 | label.col-sm-2.control-label(for="inputYear") 上映年代 35 | .col-sm-10 36 | input#inputYear.form-control(type="text", name="movie[year]", value="#{movie.year}") 37 | .form-group 38 | label.col-sm-2.control-label(for="inputSummary") 电影简介 39 | .col-sm-10 40 | textarea#inputSummary.form-control(type="text", name="movie[summary]", value="#{movie.summary}") 41 | .form-group 42 | .col-sm-offset-2.col-sm-10 43 | button.btn.btn-default(type="submit") 录入 -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/pages/detail.jade: -------------------------------------------------------------------------------- 1 | extends ../layout 2 | 3 | block content 4 | .container 5 | .row 6 | .col-md-7 7 | embed(src="#{movie.flash}",allowFullScreen="true",quality="high",width="720",height="600",align="middle",type="application/x-shockwave-flash") 8 | .col-md-5 9 | dl.dl-horizontal 10 | dt 电影名字 11 | dd= movie.title 12 | dt 导演 13 | dd= movie.doctor 14 | dt 国家 15 | dd= movie.country 16 | dt 语言 17 | dd= movie.language 18 | dt 上映年份 19 | dd= movie.year 20 | dt 简介 21 | dd= movie.summary -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/pages/index.jade: -------------------------------------------------------------------------------- 1 | extends ../layout 2 | 3 | block content 4 | .container 5 | .row 6 | each item in movies 7 | .col-md-2 8 | .thumbnail 9 | a(href="/movie/#{item._id}") 10 | img(src="#{item.poster}", alt="#{item.title}") 11 | .caption 12 | h3 #{item.title} 13 | p: a.btn.btn-primary(href="/movie/#{item._id}", role="button") 观看预告片 -------------------------------------------------------------------------------- /nodejs-express-mongodb-movie/views/pages/list.jade: -------------------------------------------------------------------------------- 1 | extends ../layout 2 | 3 | block content 4 | .container 5 | .row 6 | table.table.table-hover.table-bordered 7 | thead 8 | tr 9 | th 电影名字 10 | th 导演 11 | th 国家 12 | th 上映年份 13 | th 录入时间 14 | th 查看 15 | th 更新 16 | th 删除 17 | tbody 18 | each item in movies 19 | tr(class="item-id-#{item._id}") 20 | td #{item.title} 21 | td #{item.doctor} 22 | td #{item.country} 23 | td #{item.year} 24 | td #{moment(item.meta.updateAt).format('MM/DD/YYYY')} 25 | td: a(target="_blank", href="../movie/#{item._id}") 查看 26 | td: a(target="_blank", href="../admin/update/#{item._id}") 修改 27 | td 28 | button.btn.btn-danger.del(type="button", data-id="#{item._id}") 删除 29 | script(src="/js/admin.js") --------------------------------------------------------------------------------