├── .gitignore ├── README.md ├── backend ├── app.js ├── bin │ └── www ├── package-lock.json ├── package.json ├── public │ ├── 2test.jpg │ ├── beatsbydre.jpg │ ├── cao.jpg │ ├── ccccc.jpg │ ├── cvbcbcvb.jpg │ ├── cxcx.jpg │ ├── dadadadada.jpg │ ├── deded.jpg │ ├── filename.jpg │ ├── finaflfinal.jpg │ ├── final.jpg │ ├── moja slika.jpg │ ├── newpic.jpg │ ├── slikica.jpg │ ├── ssx.jpg │ ├── stylesheets │ │ └── style.css │ ├── test.jpg │ ├── testssss.jpg │ ├── tst.jpg │ ├── vfffghgh.jpg │ ├── x.jpg │ ├── xcxc.jpg │ ├── xcxcx.jpg │ └── xxxxccccc.jpg └── views │ ├── error.jade │ ├── index.jade │ └── layout.jade ├── frontend ├── .babelrc ├── .eslintrc ├── .gitignore ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json └── src │ ├── App.jsx │ ├── components │ └── Main.jsx │ ├── index.css │ ├── index.js │ └── registerServiceWorker.js └── package-lock.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # File Upload Tutorial 2 | 3 | *File upload tutorial using React.js & Node.js* 4 | 5 | ## Getting Started 6 | 7 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. 8 | 9 | 10 | ### Prerequisites 11 | 12 | You are going to need **Node.js** and **npm** installed on your machine. 13 | 14 | ### Installing 15 | 16 | How to properly install and configure this repository to work on your machine. 17 | 18 | Cloning the repository 19 | 20 | ``` 21 | git clone ... 22 | ``` 23 | 24 | Enter cloned directory 25 | 26 | ``` 27 | cd file-upload/ 28 | ``` 29 | Enter Backend directory and do npm install 30 | 31 | ``` 32 | cd file-upload/backend && npm install --save 33 | ``` 34 | Enter Frontend directory and do npm install 35 | 36 | ``` 37 | cd file-upload/frontend && npm install --save 38 | ``` 39 | 40 | ## Starting the repository on your machine 41 | 42 | You will need to run Backend & Frontend seperately, ports are already configured, make sure you don't conflict them if you change anything. 43 | 44 | Enter Frontend directory and do npm start 45 | 46 | ``` 47 | cd file-upload/frontend && npm start 48 | ``` 49 | Enter Backend directory and do npm start 50 | 51 | ``` 52 | cd file-upload/backend && npm start 53 | ``` 54 | 55 | Now you can load **localhost:3000** in your browser and use the app. 56 | 57 | ## Built With 58 | 59 | * [React](https://reactjs.org/) - Frontend javascript library 60 | * [Node](https://nodejs.org/en/) - Backend framework 61 | * [Express](https://expressjs.com/) - Node.js web application framework 62 | 63 | ## Authors 64 | 65 | * **Antonio Erdeljac** - *Initial work* - [File-Upload-Tutorial](https://github.com/AntonioErdeljac) 66 | 67 | ## Acknowledgments 68 | 69 | * This is a repository for my [Medium.com tutorial](https://medium.com/@_aerdeljac/file-upload-with-node-js-react-js-686e342ad7e7) 70 | * AirBnB's coding rules are applied in the frontend. 71 | -------------------------------------------------------------------------------- /backend/app.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const path = require('path'); 3 | const favicon = require('serve-favicon'); 4 | const logger = require('morgan'); 5 | const cookieParser = require('cookie-parser'); 6 | const bodyParser = require('body-parser'); 7 | const fileUpload = require('express-fileupload'); 8 | const cors = require('cors'); 9 | 10 | const app = express(); 11 | 12 | // view engine setup 13 | app.set('views', path.join(__dirname, 'views')); 14 | app.set('view engine', 'jade'); 15 | 16 | // uncomment after placing your favicon in /public 17 | //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 18 | app.use(logger('dev')); 19 | app.use(cors()); 20 | app.use(bodyParser.json()); 21 | app.use(bodyParser.urlencoded({ extended: false })); 22 | app.use(cookieParser()); 23 | app.use(fileUpload()); 24 | app.use('/public', express.static(__dirname + '/public')); 25 | 26 | 27 | app.post('/upload', (req, res, next) => { 28 | console.log(req); 29 | let imageFile = req.files.file; 30 | 31 | imageFile.mv(`${__dirname}/public/${req.body.filename}.jpg`, function(err) { 32 | if (err) { 33 | return res.status(500).send(err); 34 | } 35 | 36 | res.json({file: `public/${req.body.filename}.jpg`}); 37 | }); 38 | 39 | }) 40 | 41 | // catch 404 and forward to error handler 42 | app.use(function(req, res, next) { 43 | const err = new Error('Not Found'); 44 | err.status = 404; 45 | next(err); 46 | }); 47 | 48 | // error handler 49 | app.use(function(err, req, res, next) { 50 | // set locals, only providing error in development 51 | res.locals.message = err.message; 52 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 53 | 54 | // render the error page 55 | res.status(err.status || 500); 56 | res.render('error'); 57 | }); 58 | 59 | app.listen(8000, () => { 60 | console.log('8000'); 61 | }); 62 | 63 | module.exports = app; 64 | -------------------------------------------------------------------------------- /backend/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('backend:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.4", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", 10 | "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", 11 | "requires": { 12 | "mime-types": "2.1.17", 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 | "basic-auth": { 55 | "version": "2.0.0", 56 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", 57 | "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", 58 | "requires": { 59 | "safe-buffer": "5.1.1" 60 | } 61 | }, 62 | "body-parser": { 63 | "version": "1.18.2", 64 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 65 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 66 | "requires": { 67 | "bytes": "3.0.0", 68 | "content-type": "1.0.4", 69 | "debug": "2.6.9", 70 | "depd": "1.1.2", 71 | "http-errors": "1.6.2", 72 | "iconv-lite": "0.4.19", 73 | "on-finished": "2.3.0", 74 | "qs": "6.5.1", 75 | "raw-body": "2.3.2", 76 | "type-is": "1.6.15" 77 | } 78 | }, 79 | "busboy": { 80 | "version": "0.2.14", 81 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", 82 | "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", 83 | "requires": { 84 | "dicer": "0.2.5", 85 | "readable-stream": "1.1.14" 86 | } 87 | }, 88 | "bytes": { 89 | "version": "3.0.0", 90 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 91 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 92 | }, 93 | "camelcase": { 94 | "version": "1.2.1", 95 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 96 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 97 | }, 98 | "center-align": { 99 | "version": "0.1.3", 100 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 101 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 102 | "requires": { 103 | "align-text": "0.1.4", 104 | "lazy-cache": "1.0.4" 105 | } 106 | }, 107 | "character-parser": { 108 | "version": "1.2.1", 109 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", 110 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" 111 | }, 112 | "clean-css": { 113 | "version": "3.4.28", 114 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", 115 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", 116 | "requires": { 117 | "commander": "2.8.1", 118 | "source-map": "0.4.4" 119 | }, 120 | "dependencies": { 121 | "commander": { 122 | "version": "2.8.1", 123 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", 124 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", 125 | "requires": { 126 | "graceful-readlink": "1.0.1" 127 | } 128 | } 129 | } 130 | }, 131 | "cliui": { 132 | "version": "2.1.0", 133 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 134 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 135 | "requires": { 136 | "center-align": "0.1.3", 137 | "right-align": "0.1.3", 138 | "wordwrap": "0.0.2" 139 | }, 140 | "dependencies": { 141 | "wordwrap": { 142 | "version": "0.0.2", 143 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 144 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 145 | } 146 | } 147 | }, 148 | "commander": { 149 | "version": "2.6.0", 150 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", 151 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" 152 | }, 153 | "constantinople": { 154 | "version": "3.0.2", 155 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", 156 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", 157 | "requires": { 158 | "acorn": "2.7.0" 159 | } 160 | }, 161 | "content-disposition": { 162 | "version": "0.5.2", 163 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 164 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 165 | }, 166 | "content-type": { 167 | "version": "1.0.4", 168 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 169 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 170 | }, 171 | "cookie": { 172 | "version": "0.3.1", 173 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 174 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 175 | }, 176 | "cookie-parser": { 177 | "version": "1.4.3", 178 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", 179 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", 180 | "requires": { 181 | "cookie": "0.3.1", 182 | "cookie-signature": "1.0.6" 183 | } 184 | }, 185 | "cookie-signature": { 186 | "version": "1.0.6", 187 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 188 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 189 | }, 190 | "core-util-is": { 191 | "version": "1.0.2", 192 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 193 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 194 | }, 195 | "cors": { 196 | "version": "2.8.4", 197 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", 198 | "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", 199 | "requires": { 200 | "object-assign": "4.1.1", 201 | "vary": "1.1.2" 202 | } 203 | }, 204 | "css": { 205 | "version": "1.0.8", 206 | "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", 207 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", 208 | "requires": { 209 | "css-parse": "1.0.4", 210 | "css-stringify": "1.0.5" 211 | } 212 | }, 213 | "css-parse": { 214 | "version": "1.0.4", 215 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", 216 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" 217 | }, 218 | "css-stringify": { 219 | "version": "1.0.5", 220 | "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", 221 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" 222 | }, 223 | "debug": { 224 | "version": "2.6.9", 225 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 226 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 227 | "requires": { 228 | "ms": "2.0.0" 229 | } 230 | }, 231 | "decamelize": { 232 | "version": "1.2.0", 233 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 234 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 235 | }, 236 | "depd": { 237 | "version": "1.1.2", 238 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 239 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 240 | }, 241 | "destroy": { 242 | "version": "1.0.4", 243 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 244 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 245 | }, 246 | "dicer": { 247 | "version": "0.2.5", 248 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", 249 | "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", 250 | "requires": { 251 | "readable-stream": "1.1.14", 252 | "streamsearch": "0.1.2" 253 | } 254 | }, 255 | "ee-first": { 256 | "version": "1.1.1", 257 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 258 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 259 | }, 260 | "encodeurl": { 261 | "version": "1.0.1", 262 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 263 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" 264 | }, 265 | "escape-html": { 266 | "version": "1.0.3", 267 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 268 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 269 | }, 270 | "etag": { 271 | "version": "1.8.1", 272 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 273 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 274 | }, 275 | "express": { 276 | "version": "4.15.5", 277 | "resolved": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", 278 | "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", 279 | "requires": { 280 | "accepts": "1.3.4", 281 | "array-flatten": "1.1.1", 282 | "content-disposition": "0.5.2", 283 | "content-type": "1.0.4", 284 | "cookie": "0.3.1", 285 | "cookie-signature": "1.0.6", 286 | "debug": "2.6.9", 287 | "depd": "1.1.2", 288 | "encodeurl": "1.0.1", 289 | "escape-html": "1.0.3", 290 | "etag": "1.8.1", 291 | "finalhandler": "1.0.6", 292 | "fresh": "0.5.2", 293 | "merge-descriptors": "1.0.1", 294 | "methods": "1.1.2", 295 | "on-finished": "2.3.0", 296 | "parseurl": "1.3.2", 297 | "path-to-regexp": "0.1.7", 298 | "proxy-addr": "1.1.5", 299 | "qs": "6.5.0", 300 | "range-parser": "1.2.0", 301 | "send": "0.15.6", 302 | "serve-static": "1.12.6", 303 | "setprototypeof": "1.0.3", 304 | "statuses": "1.3.1", 305 | "type-is": "1.6.15", 306 | "utils-merge": "1.0.0", 307 | "vary": "1.1.2" 308 | }, 309 | "dependencies": { 310 | "qs": { 311 | "version": "6.5.0", 312 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", 313 | "integrity": "sha512-fjVFjW9yhqMhVGwRExCXLhJKrLlkYSaxNWdyc9rmHlrVZbk35YHH312dFd7191uQeXkI3mKLZTIbSvIeFwFemg==" 314 | }, 315 | "statuses": { 316 | "version": "1.3.1", 317 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 318 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 319 | } 320 | } 321 | }, 322 | "express-fileupload": { 323 | "version": "0.3.0", 324 | "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-0.3.0.tgz", 325 | "integrity": "sha512-IdX2oOFphEg3px0NylgtqluSTjDZgAyEfhZBWgmDNw75xbG89UnYqi/ZbFsTuDh1RGDDUK4JqdHYNH4p2KK1+g==", 326 | "requires": { 327 | "busboy": "0.2.14", 328 | "fs-extra": "4.0.3", 329 | "streamifier": "0.1.1" 330 | } 331 | }, 332 | "finalhandler": { 333 | "version": "1.0.6", 334 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", 335 | "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", 336 | "requires": { 337 | "debug": "2.6.9", 338 | "encodeurl": "1.0.1", 339 | "escape-html": "1.0.3", 340 | "on-finished": "2.3.0", 341 | "parseurl": "1.3.2", 342 | "statuses": "1.3.1", 343 | "unpipe": "1.0.0" 344 | }, 345 | "dependencies": { 346 | "statuses": { 347 | "version": "1.3.1", 348 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 349 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 350 | } 351 | } 352 | }, 353 | "forwarded": { 354 | "version": "0.1.2", 355 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 356 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 357 | }, 358 | "fresh": { 359 | "version": "0.5.2", 360 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 361 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 362 | }, 363 | "fs-extra": { 364 | "version": "4.0.3", 365 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 366 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 367 | "requires": { 368 | "graceful-fs": "4.1.11", 369 | "jsonfile": "4.0.0", 370 | "universalify": "0.1.1" 371 | } 372 | }, 373 | "graceful-fs": { 374 | "version": "4.1.11", 375 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 376 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 377 | }, 378 | "graceful-readlink": { 379 | "version": "1.0.1", 380 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 381 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 382 | }, 383 | "http-errors": { 384 | "version": "1.6.2", 385 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 386 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 387 | "requires": { 388 | "depd": "1.1.1", 389 | "inherits": "2.0.3", 390 | "setprototypeof": "1.0.3", 391 | "statuses": "1.4.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 | } 400 | }, 401 | "iconv-lite": { 402 | "version": "0.4.19", 403 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 404 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 405 | }, 406 | "inherits": { 407 | "version": "2.0.3", 408 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 409 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 410 | }, 411 | "ipaddr.js": { 412 | "version": "1.4.0", 413 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", 414 | "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" 415 | }, 416 | "is-buffer": { 417 | "version": "1.1.6", 418 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 419 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 420 | }, 421 | "is-promise": { 422 | "version": "2.1.0", 423 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 424 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 425 | }, 426 | "isarray": { 427 | "version": "0.0.1", 428 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 429 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 430 | }, 431 | "jade": { 432 | "version": "1.11.0", 433 | "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", 434 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", 435 | "requires": { 436 | "character-parser": "1.2.1", 437 | "clean-css": "3.4.28", 438 | "commander": "2.6.0", 439 | "constantinople": "3.0.2", 440 | "jstransformer": "0.0.2", 441 | "mkdirp": "0.5.1", 442 | "transformers": "2.1.0", 443 | "uglify-js": "2.8.29", 444 | "void-elements": "2.0.1", 445 | "with": "4.0.3" 446 | } 447 | }, 448 | "jsonfile": { 449 | "version": "4.0.0", 450 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 451 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 452 | "requires": { 453 | "graceful-fs": "4.1.11" 454 | } 455 | }, 456 | "jstransformer": { 457 | "version": "0.0.2", 458 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", 459 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", 460 | "requires": { 461 | "is-promise": "2.1.0", 462 | "promise": "6.1.0" 463 | } 464 | }, 465 | "kind-of": { 466 | "version": "3.2.2", 467 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 468 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 469 | "requires": { 470 | "is-buffer": "1.1.6" 471 | } 472 | }, 473 | "lazy-cache": { 474 | "version": "1.0.4", 475 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 476 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 477 | }, 478 | "longest": { 479 | "version": "1.0.1", 480 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 481 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 482 | }, 483 | "media-typer": { 484 | "version": "0.3.0", 485 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 486 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 487 | }, 488 | "merge-descriptors": { 489 | "version": "1.0.1", 490 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 491 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 492 | }, 493 | "methods": { 494 | "version": "1.1.2", 495 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 496 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 497 | }, 498 | "mime": { 499 | "version": "1.3.4", 500 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", 501 | "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" 502 | }, 503 | "mime-db": { 504 | "version": "1.30.0", 505 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 506 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 507 | }, 508 | "mime-types": { 509 | "version": "2.1.17", 510 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 511 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 512 | "requires": { 513 | "mime-db": "1.30.0" 514 | } 515 | }, 516 | "minimist": { 517 | "version": "0.0.8", 518 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 519 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 520 | }, 521 | "mkdirp": { 522 | "version": "0.5.1", 523 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 524 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 525 | "requires": { 526 | "minimist": "0.0.8" 527 | } 528 | }, 529 | "morgan": { 530 | "version": "1.9.0", 531 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", 532 | "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", 533 | "requires": { 534 | "basic-auth": "2.0.0", 535 | "debug": "2.6.9", 536 | "depd": "1.1.2", 537 | "on-finished": "2.3.0", 538 | "on-headers": "1.0.1" 539 | } 540 | }, 541 | "ms": { 542 | "version": "2.0.0", 543 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 544 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 545 | }, 546 | "negotiator": { 547 | "version": "0.6.1", 548 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 549 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 550 | }, 551 | "object-assign": { 552 | "version": "4.1.1", 553 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 554 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 555 | }, 556 | "on-finished": { 557 | "version": "2.3.0", 558 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 559 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 560 | "requires": { 561 | "ee-first": "1.1.1" 562 | } 563 | }, 564 | "on-headers": { 565 | "version": "1.0.1", 566 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 567 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 568 | }, 569 | "optimist": { 570 | "version": "0.3.7", 571 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 572 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", 573 | "requires": { 574 | "wordwrap": "0.0.3" 575 | } 576 | }, 577 | "parseurl": { 578 | "version": "1.3.2", 579 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 580 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 581 | }, 582 | "path-to-regexp": { 583 | "version": "0.1.7", 584 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 585 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 586 | }, 587 | "promise": { 588 | "version": "6.1.0", 589 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", 590 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", 591 | "requires": { 592 | "asap": "1.0.0" 593 | } 594 | }, 595 | "proxy-addr": { 596 | "version": "1.1.5", 597 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", 598 | "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", 599 | "requires": { 600 | "forwarded": "0.1.2", 601 | "ipaddr.js": "1.4.0" 602 | } 603 | }, 604 | "qs": { 605 | "version": "6.5.1", 606 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 607 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 608 | }, 609 | "range-parser": { 610 | "version": "1.2.0", 611 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 612 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 613 | }, 614 | "raw-body": { 615 | "version": "2.3.2", 616 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 617 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 618 | "requires": { 619 | "bytes": "3.0.0", 620 | "http-errors": "1.6.2", 621 | "iconv-lite": "0.4.19", 622 | "unpipe": "1.0.0" 623 | } 624 | }, 625 | "readable-stream": { 626 | "version": "1.1.14", 627 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 628 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 629 | "requires": { 630 | "core-util-is": "1.0.2", 631 | "inherits": "2.0.3", 632 | "isarray": "0.0.1", 633 | "string_decoder": "0.10.31" 634 | } 635 | }, 636 | "repeat-string": { 637 | "version": "1.6.1", 638 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 639 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 640 | }, 641 | "right-align": { 642 | "version": "0.1.3", 643 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 644 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 645 | "requires": { 646 | "align-text": "0.1.4" 647 | } 648 | }, 649 | "safe-buffer": { 650 | "version": "5.1.1", 651 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 652 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 653 | }, 654 | "send": { 655 | "version": "0.15.6", 656 | "resolved": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", 657 | "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", 658 | "requires": { 659 | "debug": "2.6.9", 660 | "depd": "1.1.2", 661 | "destroy": "1.0.4", 662 | "encodeurl": "1.0.1", 663 | "escape-html": "1.0.3", 664 | "etag": "1.8.1", 665 | "fresh": "0.5.2", 666 | "http-errors": "1.6.2", 667 | "mime": "1.3.4", 668 | "ms": "2.0.0", 669 | "on-finished": "2.3.0", 670 | "range-parser": "1.2.0", 671 | "statuses": "1.3.1" 672 | }, 673 | "dependencies": { 674 | "statuses": { 675 | "version": "1.3.1", 676 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 677 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 678 | } 679 | } 680 | }, 681 | "serve-favicon": { 682 | "version": "2.4.5", 683 | "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.4.5.tgz", 684 | "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", 685 | "requires": { 686 | "etag": "1.8.1", 687 | "fresh": "0.5.2", 688 | "ms": "2.0.0", 689 | "parseurl": "1.3.2", 690 | "safe-buffer": "5.1.1" 691 | } 692 | }, 693 | "serve-static": { 694 | "version": "1.12.6", 695 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", 696 | "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", 697 | "requires": { 698 | "encodeurl": "1.0.1", 699 | "escape-html": "1.0.3", 700 | "parseurl": "1.3.2", 701 | "send": "0.15.6" 702 | } 703 | }, 704 | "setprototypeof": { 705 | "version": "1.0.3", 706 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 707 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 708 | }, 709 | "source-map": { 710 | "version": "0.4.4", 711 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 712 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", 713 | "requires": { 714 | "amdefine": "1.0.1" 715 | } 716 | }, 717 | "statuses": { 718 | "version": "1.4.0", 719 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 720 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 721 | }, 722 | "streamifier": { 723 | "version": "0.1.1", 724 | "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", 725 | "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=" 726 | }, 727 | "streamsearch": { 728 | "version": "0.1.2", 729 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 730 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 731 | }, 732 | "string_decoder": { 733 | "version": "0.10.31", 734 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 735 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 736 | }, 737 | "transformers": { 738 | "version": "2.1.0", 739 | "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", 740 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", 741 | "requires": { 742 | "css": "1.0.8", 743 | "promise": "2.0.0", 744 | "uglify-js": "2.2.5" 745 | }, 746 | "dependencies": { 747 | "is-promise": { 748 | "version": "1.0.1", 749 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", 750 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" 751 | }, 752 | "promise": { 753 | "version": "2.0.0", 754 | "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", 755 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", 756 | "requires": { 757 | "is-promise": "1.0.1" 758 | } 759 | }, 760 | "source-map": { 761 | "version": "0.1.43", 762 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 763 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", 764 | "requires": { 765 | "amdefine": "1.0.1" 766 | } 767 | }, 768 | "uglify-js": { 769 | "version": "2.2.5", 770 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", 771 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", 772 | "requires": { 773 | "optimist": "0.3.7", 774 | "source-map": "0.1.43" 775 | } 776 | } 777 | } 778 | }, 779 | "type-is": { 780 | "version": "1.6.15", 781 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 782 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 783 | "requires": { 784 | "media-typer": "0.3.0", 785 | "mime-types": "2.1.17" 786 | } 787 | }, 788 | "uglify-js": { 789 | "version": "2.8.29", 790 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 791 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 792 | "requires": { 793 | "source-map": "0.5.7", 794 | "uglify-to-browserify": "1.0.2", 795 | "yargs": "3.10.0" 796 | }, 797 | "dependencies": { 798 | "source-map": { 799 | "version": "0.5.7", 800 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 801 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 802 | } 803 | } 804 | }, 805 | "uglify-to-browserify": { 806 | "version": "1.0.2", 807 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 808 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 809 | "optional": true 810 | }, 811 | "universalify": { 812 | "version": "0.1.1", 813 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", 814 | "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" 815 | }, 816 | "unpipe": { 817 | "version": "1.0.0", 818 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 819 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 820 | }, 821 | "utils-merge": { 822 | "version": "1.0.0", 823 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 824 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" 825 | }, 826 | "vary": { 827 | "version": "1.1.2", 828 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 829 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 830 | }, 831 | "void-elements": { 832 | "version": "2.0.1", 833 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 834 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 835 | }, 836 | "window-size": { 837 | "version": "0.1.0", 838 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 839 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 840 | }, 841 | "with": { 842 | "version": "4.0.3", 843 | "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", 844 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", 845 | "requires": { 846 | "acorn": "1.2.2", 847 | "acorn-globals": "1.0.9" 848 | }, 849 | "dependencies": { 850 | "acorn": { 851 | "version": "1.2.2", 852 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 853 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" 854 | } 855 | } 856 | }, 857 | "wordwrap": { 858 | "version": "0.0.3", 859 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 860 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 861 | }, 862 | "yargs": { 863 | "version": "3.10.0", 864 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 865 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 866 | "requires": { 867 | "camelcase": "1.2.1", 868 | "cliui": "2.1.0", 869 | "decamelize": "1.2.0", 870 | "window-size": "0.1.0" 871 | } 872 | } 873 | } 874 | } 875 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node ./bin/www" 7 | }, 8 | "dependencies": { 9 | "body-parser": "~1.18.2", 10 | "cookie-parser": "~1.4.3", 11 | "cors": "^2.8.4", 12 | "debug": "~2.6.9", 13 | "express": "~4.15.5", 14 | "express-fileupload": "^0.3.0", 15 | "jade": "~1.11.0", 16 | "morgan": "~1.9.0", 17 | "serve-favicon": "~2.4.5" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backend/public/2test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/2test.jpg -------------------------------------------------------------------------------- /backend/public/beatsbydre.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/beatsbydre.jpg -------------------------------------------------------------------------------- /backend/public/cao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/cao.jpg -------------------------------------------------------------------------------- /backend/public/ccccc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/ccccc.jpg -------------------------------------------------------------------------------- /backend/public/cvbcbcvb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/cvbcbcvb.jpg -------------------------------------------------------------------------------- /backend/public/cxcx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/cxcx.jpg -------------------------------------------------------------------------------- /backend/public/dadadadada.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/dadadadada.jpg -------------------------------------------------------------------------------- /backend/public/deded.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/deded.jpg -------------------------------------------------------------------------------- /backend/public/filename.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/filename.jpg -------------------------------------------------------------------------------- /backend/public/finaflfinal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/finaflfinal.jpg -------------------------------------------------------------------------------- /backend/public/final.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/final.jpg -------------------------------------------------------------------------------- /backend/public/moja slika.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/moja slika.jpg -------------------------------------------------------------------------------- /backend/public/newpic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/newpic.jpg -------------------------------------------------------------------------------- /backend/public/slikica.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/slikica.jpg -------------------------------------------------------------------------------- /backend/public/ssx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/ssx.jpg -------------------------------------------------------------------------------- /backend/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /backend/public/test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/test.jpg -------------------------------------------------------------------------------- /backend/public/testssss.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/testssss.jpg -------------------------------------------------------------------------------- /backend/public/tst.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/tst.jpg -------------------------------------------------------------------------------- /backend/public/vfffghgh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/vfffghgh.jpg -------------------------------------------------------------------------------- /backend/public/x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/x.jpg -------------------------------------------------------------------------------- /backend/public/xcxc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/xcxc.jpg -------------------------------------------------------------------------------- /backend/public/xcxcx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/xcxcx.jpg -------------------------------------------------------------------------------- /backend/public/xxxxccccc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/backend/public/xxxxccccc.jpg -------------------------------------------------------------------------------- /backend/views/error.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /backend/views/index.jade: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /backend/views/layout.jade: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /frontend/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "react"], 3 | "plugins": ["transform-object-rest-spread"] 4 | } -------------------------------------------------------------------------------- /frontend/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "airbnb", 3 | "env": { 4 | "browser": true, 5 | "node": true 6 | }, 7 | "rules": { 8 | "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], 9 | } 10 | } -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | 12 | # misc 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "file-upload", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "axios": "^0.17.1", 7 | "react": "^16.2.0", 8 | "react-dom": "^16.2.0", 9 | "react-scripts": "1.0.17" 10 | }, 11 | "scripts": { 12 | "start": "react-scripts start", 13 | "build": "react-scripts build", 14 | "test": "react-scripts test --env=jsdom", 15 | "eject": "react-scripts eject" 16 | }, 17 | "devDependencies": { 18 | "eslint": "^4.15.0", 19 | "eslint-config-airbnb": "^16.1.0", 20 | "eslint-plugin-import": "^2.8.0", 21 | "eslint-plugin-jsx-a11y": "^6.0.3", 22 | "eslint-plugin-react": "^7.5.1" 23 | }, 24 | "eslintConfig": { 25 | "globals": { 26 | "window": true, 27 | "document": true 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AntonioErdeljac/file-upload-tutorial/606db44bc05232e8de5df764778f7b05d18776e3/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 | 11 | 12 | 13 | 22 |