├── .gitignore ├── LICENSE ├── README.md └── expressjs ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | expressjs/node_modules/ 45 | java/node_modules/ 46 | expressjs/uploads/ 47 | java/uploads/ 48 | # TypeScript v1 declaration files 49 | typings/ 50 | 51 | # TypeScript cache 52 | *.tsbuildinfo 53 | 54 | # Optional npm cache directory 55 | .npm 56 | 57 | # Optional eslint cache 58 | .eslintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variables file 76 | .env 77 | .env.test 78 | 79 | # parcel-bundler cache (https://parceljs.org/) 80 | .cache 81 | 82 | # Next.js build output 83 | .next 84 | 85 | # Nuxt.js build / generate output 86 | .nuxt 87 | dist 88 | 89 | # Gatsby files 90 | .cache/ 91 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 92 | # https://nextjs.org/blog/next-9-1#public-directory-support 93 | # public 94 | 95 | # vuepress build output 96 | .vuepress/dist 97 | 98 | # Serverless directories 99 | .serverless/ 100 | 101 | # FuseBox cache 102 | .fusebox/ 103 | 104 | # DynamoDB Local files 105 | .dynamodb/ 106 | 107 | # TernJS port file 108 | .tern-port 109 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 dropzone-ui 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | dropone-ui-logo 3 | 4 |

Dropzone-UI (file-upload-server-side)

5 | Server side implementations for uploading files. 6 | 7 |

8 | 9 | # Express 10 | Server side implementation for uploading files built with Express.js. 11 | 12 | 13 | ## Run server 14 | Follow the instructions to run the server. 15 | 16 | ```sh 17 | #clone this repository 18 | git clone https://github.com/dropzone-ui/file-upload-server-side.git 19 | 20 | #move to project folder 21 | cd ./expressjs 22 | 23 | #install dependencies 24 | npm install 25 | 26 | #run server on development mode 27 | npm run dev 28 | ``` 29 | 30 | Congrats! you are done!. Your server is now running on port 2800. 31 | So, the url endpoint that must be given to `Dropzone` component is `http://localhost:2800/upload-my-file`. 32 | 33 | If you deploy your server, the url prop will change to `http:///upload-my-file`. 34 | 35 | # Frontend side 36 | Now upload some files from a react app using [dropzone-ui](https://www.npmjs.com/package/@dropzone-ui/react) this way: 37 | 38 | ```jsx 39 | import React,{ useState} from "react"; 40 | import { Dropzone, FullScreenPreview, FileItem } from "@dropzone-ui/react"; 41 | 42 | const SERVER_URL = "http://localhost:2800"; 43 | 44 | const Example = props =>{ 45 | const [files, setFiles] = useState([]); 46 | const updateFiles = (incommingFiles) => { 47 | console.log("incomming files", incommingFiles); 48 | setFiles(incommingFiles); 49 | }; 50 | const handleUpload=(responses)=>{ 51 | //check the responses here 52 | console.log("responses", responses); 53 | } 54 | const onDelete = (id) => { 55 | setFiles(files.filter((x) => x.id !== id)); 56 | }; 57 | 58 | return ( 59 | 65 | {files.map((file) => ( 66 | 71 | ))} 72 | 73 | ); 74 | } 75 | export default Example; 76 | ``` 77 | 78 | For more examples of [dropzone-ui](https://www.npmjs.com/package/@dropzone-ui/react), check [here](https://www.npmjs.com/package/@dropzone-ui/react#Usage-and-examples). 79 | 80 | ## License 81 | 82 | This project is licensed under the terms of the 83 | [MIT license](/LICENSE). 84 | -------------------------------------------------------------------------------- /expressjs/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const fileUpload = require("express-fileupload"); 3 | const cors = require("cors"); 4 | const bodyParser = require("body-parser"); 5 | const morgan = require("morgan"); 6 | const _ = require("lodash"); 7 | 8 | const app = express(); 9 | 10 | // enable files upload 11 | app.use(fileUpload({ createParentPath: true })); 12 | //add other middleware 13 | app.use(cors()); 14 | app.use(bodyParser.json()); 15 | app.use(bodyParser.urlencoded({ extended: true })); 16 | app.use(morgan("dev")); 17 | 18 | //start app 19 | const port = process.env.PORT || 2800; 20 | 21 | app.listen(port, () => console.log(`App is listening on port ${port}.`)); 22 | app.post("/upload-my-file", async (req, res) => { 23 | try { 24 | if (!req.files) { 25 | res.send({ 26 | status: false, 27 | message: "No file uploaded", 28 | payload: {}, 29 | }); 30 | } else { 31 | //Use the name of the input field (i.e. "file") to retrieve the uploaded file 32 | let file = req.files.file; 33 | //Use the mv() method to place the file in upload directory (i.e. "uploads") 34 | file.mv("./uploads/" + file.name); 35 | //send response 36 | res.send({ 37 | status: true, 38 | message: "File was uploaded successfully", 39 | payload: { 40 | name: file.name, 41 | mimetype: file.mimetype, 42 | size: file.size, 43 | path: "/files/uploads/", 44 | url: "https://my-ftp-server.com/bjYJGFYgjfVGHVb", 45 | }, 46 | }); 47 | } 48 | } catch (err) { 49 | res.status(500).send({ 50 | status: false, 51 | message: "Unspected problem", 52 | payload: {}, 53 | }); 54 | } 55 | }); 56 | -------------------------------------------------------------------------------- /expressjs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "expressjs", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 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 | "basic-auth": { 22 | "version": "2.0.1", 23 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 24 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 25 | "requires": { 26 | "safe-buffer": "5.1.2" 27 | } 28 | }, 29 | "body-parser": { 30 | "version": "1.19.0", 31 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 32 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 33 | "requires": { 34 | "bytes": "3.1.0", 35 | "content-type": "~1.0.4", 36 | "debug": "2.6.9", 37 | "depd": "~1.1.2", 38 | "http-errors": "1.7.2", 39 | "iconv-lite": "0.4.24", 40 | "on-finished": "~2.3.0", 41 | "qs": "6.7.0", 42 | "raw-body": "2.4.0", 43 | "type-is": "~1.6.17" 44 | } 45 | }, 46 | "busboy": { 47 | "version": "0.3.1", 48 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", 49 | "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", 50 | "requires": { 51 | "dicer": "0.3.0" 52 | } 53 | }, 54 | "bytes": { 55 | "version": "3.1.0", 56 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 57 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 58 | }, 59 | "content-disposition": { 60 | "version": "0.5.3", 61 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 62 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 63 | "requires": { 64 | "safe-buffer": "5.1.2" 65 | } 66 | }, 67 | "content-type": { 68 | "version": "1.0.4", 69 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 70 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 71 | }, 72 | "cookie": { 73 | "version": "0.4.0", 74 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 75 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 76 | }, 77 | "cookie-signature": { 78 | "version": "1.0.6", 79 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 80 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 81 | }, 82 | "cors": { 83 | "version": "2.8.5", 84 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 85 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 86 | "requires": { 87 | "object-assign": "^4", 88 | "vary": "^1" 89 | } 90 | }, 91 | "debug": { 92 | "version": "2.6.9", 93 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 94 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 95 | "requires": { 96 | "ms": "2.0.0" 97 | } 98 | }, 99 | "depd": { 100 | "version": "1.1.2", 101 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 102 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 103 | }, 104 | "destroy": { 105 | "version": "1.0.4", 106 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 107 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 108 | }, 109 | "dicer": { 110 | "version": "0.3.0", 111 | "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", 112 | "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", 113 | "requires": { 114 | "streamsearch": "0.1.2" 115 | } 116 | }, 117 | "ee-first": { 118 | "version": "1.1.1", 119 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 120 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 121 | }, 122 | "encodeurl": { 123 | "version": "1.0.2", 124 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 125 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 126 | }, 127 | "escape-html": { 128 | "version": "1.0.3", 129 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 130 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 131 | }, 132 | "etag": { 133 | "version": "1.8.1", 134 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 135 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 136 | }, 137 | "express": { 138 | "version": "4.17.1", 139 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 140 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 141 | "requires": { 142 | "accepts": "~1.3.7", 143 | "array-flatten": "1.1.1", 144 | "body-parser": "1.19.0", 145 | "content-disposition": "0.5.3", 146 | "content-type": "~1.0.4", 147 | "cookie": "0.4.0", 148 | "cookie-signature": "1.0.6", 149 | "debug": "2.6.9", 150 | "depd": "~1.1.2", 151 | "encodeurl": "~1.0.2", 152 | "escape-html": "~1.0.3", 153 | "etag": "~1.8.1", 154 | "finalhandler": "~1.1.2", 155 | "fresh": "0.5.2", 156 | "merge-descriptors": "1.0.1", 157 | "methods": "~1.1.2", 158 | "on-finished": "~2.3.0", 159 | "parseurl": "~1.3.3", 160 | "path-to-regexp": "0.1.7", 161 | "proxy-addr": "~2.0.5", 162 | "qs": "6.7.0", 163 | "range-parser": "~1.2.1", 164 | "safe-buffer": "5.1.2", 165 | "send": "0.17.1", 166 | "serve-static": "1.14.1", 167 | "setprototypeof": "1.1.1", 168 | "statuses": "~1.5.0", 169 | "type-is": "~1.6.18", 170 | "utils-merge": "1.0.1", 171 | "vary": "~1.1.2" 172 | } 173 | }, 174 | "express-fileupload": { 175 | "version": "1.2.1", 176 | "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.2.1.tgz", 177 | "integrity": "sha512-fWPNAkBj+Azt9Itmcz/Reqdg3LeBfaXptDEev2JM8bCC0yDptglCnlizhf0YZauyU5X/g6v7v4Xxqhg8tmEfEA==", 178 | "requires": { 179 | "busboy": "^0.3.1" 180 | } 181 | }, 182 | "finalhandler": { 183 | "version": "1.1.2", 184 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 185 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 186 | "requires": { 187 | "debug": "2.6.9", 188 | "encodeurl": "~1.0.2", 189 | "escape-html": "~1.0.3", 190 | "on-finished": "~2.3.0", 191 | "parseurl": "~1.3.3", 192 | "statuses": "~1.5.0", 193 | "unpipe": "~1.0.0" 194 | } 195 | }, 196 | "forwarded": { 197 | "version": "0.2.0", 198 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 199 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 200 | }, 201 | "fresh": { 202 | "version": "0.5.2", 203 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 204 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 205 | }, 206 | "http-errors": { 207 | "version": "1.7.2", 208 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 209 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 210 | "requires": { 211 | "depd": "~1.1.2", 212 | "inherits": "2.0.3", 213 | "setprototypeof": "1.1.1", 214 | "statuses": ">= 1.5.0 < 2", 215 | "toidentifier": "1.0.0" 216 | } 217 | }, 218 | "iconv-lite": { 219 | "version": "0.4.24", 220 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 221 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 222 | "requires": { 223 | "safer-buffer": ">= 2.1.2 < 3" 224 | } 225 | }, 226 | "inherits": { 227 | "version": "2.0.3", 228 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 229 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 230 | }, 231 | "ipaddr.js": { 232 | "version": "1.9.1", 233 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 234 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 235 | }, 236 | "lodash": { 237 | "version": "4.17.21", 238 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 239 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 240 | }, 241 | "media-typer": { 242 | "version": "0.3.0", 243 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 244 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 245 | }, 246 | "merge-descriptors": { 247 | "version": "1.0.1", 248 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 249 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 250 | }, 251 | "methods": { 252 | "version": "1.1.2", 253 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 254 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 255 | }, 256 | "mime": { 257 | "version": "1.6.0", 258 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 259 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 260 | }, 261 | "mime-db": { 262 | "version": "1.49.0", 263 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", 264 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" 265 | }, 266 | "mime-types": { 267 | "version": "2.1.32", 268 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", 269 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", 270 | "requires": { 271 | "mime-db": "1.49.0" 272 | } 273 | }, 274 | "morgan": { 275 | "version": "1.10.0", 276 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", 277 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", 278 | "requires": { 279 | "basic-auth": "~2.0.1", 280 | "debug": "2.6.9", 281 | "depd": "~2.0.0", 282 | "on-finished": "~2.3.0", 283 | "on-headers": "~1.0.2" 284 | }, 285 | "dependencies": { 286 | "depd": { 287 | "version": "2.0.0", 288 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 289 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" 290 | } 291 | } 292 | }, 293 | "ms": { 294 | "version": "2.0.0", 295 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 296 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 297 | }, 298 | "negotiator": { 299 | "version": "0.6.2", 300 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 301 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 302 | }, 303 | "object-assign": { 304 | "version": "4.1.1", 305 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 306 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 307 | }, 308 | "on-finished": { 309 | "version": "2.3.0", 310 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 311 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 312 | "requires": { 313 | "ee-first": "1.1.1" 314 | } 315 | }, 316 | "on-headers": { 317 | "version": "1.0.2", 318 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 319 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" 320 | }, 321 | "parseurl": { 322 | "version": "1.3.3", 323 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 324 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 325 | }, 326 | "path-to-regexp": { 327 | "version": "0.1.7", 328 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 329 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 330 | }, 331 | "proxy-addr": { 332 | "version": "2.0.7", 333 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 334 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 335 | "requires": { 336 | "forwarded": "0.2.0", 337 | "ipaddr.js": "1.9.1" 338 | } 339 | }, 340 | "qs": { 341 | "version": "6.7.0", 342 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 343 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 344 | }, 345 | "range-parser": { 346 | "version": "1.2.1", 347 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 348 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 349 | }, 350 | "raw-body": { 351 | "version": "2.4.0", 352 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 353 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 354 | "requires": { 355 | "bytes": "3.1.0", 356 | "http-errors": "1.7.2", 357 | "iconv-lite": "0.4.24", 358 | "unpipe": "1.0.0" 359 | } 360 | }, 361 | "safe-buffer": { 362 | "version": "5.1.2", 363 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 364 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 365 | }, 366 | "safer-buffer": { 367 | "version": "2.1.2", 368 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 369 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 370 | }, 371 | "send": { 372 | "version": "0.17.1", 373 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 374 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 375 | "requires": { 376 | "debug": "2.6.9", 377 | "depd": "~1.1.2", 378 | "destroy": "~1.0.4", 379 | "encodeurl": "~1.0.2", 380 | "escape-html": "~1.0.3", 381 | "etag": "~1.8.1", 382 | "fresh": "0.5.2", 383 | "http-errors": "~1.7.2", 384 | "mime": "1.6.0", 385 | "ms": "2.1.1", 386 | "on-finished": "~2.3.0", 387 | "range-parser": "~1.2.1", 388 | "statuses": "~1.5.0" 389 | }, 390 | "dependencies": { 391 | "ms": { 392 | "version": "2.1.1", 393 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 394 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 395 | } 396 | } 397 | }, 398 | "serve-static": { 399 | "version": "1.14.1", 400 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 401 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 402 | "requires": { 403 | "encodeurl": "~1.0.2", 404 | "escape-html": "~1.0.3", 405 | "parseurl": "~1.3.3", 406 | "send": "0.17.1" 407 | } 408 | }, 409 | "setprototypeof": { 410 | "version": "1.1.1", 411 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 412 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 413 | }, 414 | "statuses": { 415 | "version": "1.5.0", 416 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 417 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 418 | }, 419 | "streamsearch": { 420 | "version": "0.1.2", 421 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", 422 | "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" 423 | }, 424 | "toidentifier": { 425 | "version": "1.0.0", 426 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 427 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 428 | }, 429 | "type-is": { 430 | "version": "1.6.18", 431 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 432 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 433 | "requires": { 434 | "media-typer": "0.3.0", 435 | "mime-types": "~2.1.24" 436 | } 437 | }, 438 | "unpipe": { 439 | "version": "1.0.0", 440 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 441 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 442 | }, 443 | "utils-merge": { 444 | "version": "1.0.1", 445 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 446 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 447 | }, 448 | "vary": { 449 | "version": "1.1.2", 450 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 451 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 452 | } 453 | } 454 | } 455 | -------------------------------------------------------------------------------- /expressjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "expressjs", 3 | "version": "2.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "dev": "node index.js" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "body-parser": "^1.19.0", 15 | "cors": "^2.8.5", 16 | "express": "^4.17.1", 17 | "express-fileupload": "^1.2.1", 18 | "lodash": "^4.17.21", 19 | "morgan": "^1.10.0" 20 | } 21 | } 22 | --------------------------------------------------------------------------------