├── 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 |
16 |
17 | <% todos.forEach(function(todo){ %>
18 | - <%- todo.item -%>
19 | <% }) %>
20 |
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")
--------------------------------------------------------------------------------