Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-1-CloudComputing
/
D_Team_Khuloud
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
최동원
2020-06-11 00:11:06 +0900
Browse Files
Options
Browse Files
Download
Plain Diff
Commit
0e2c784368f6aeb6b92113eefaeb46d7d4435a65
0e2c7843
2 parents
01b8754b
4e06117e
.
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
564 additions
and
1 deletions
backend/app.js
backend/package-lock.json
backend/package.json
backend/routes/contact.js
backend/routes/modules/config.js
backend/app.js
View file @
0e2c784
backend/package-lock.json
View file @
0e2c784
...
...
@@ -38,6 +38,15 @@
"resolved"
:
"https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz"
,
"integrity"
:
"sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ=="
},
"adler-32"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz"
,
"integrity"
:
"sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU="
,
"requires"
:
{
"exit-on-epipe"
:
"~1.0.1"
,
"printj"
:
"~1.1.0"
}
},
"ajv"
:
{
"version"
:
"6.12.2"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz"
,
...
...
@@ -57,6 +66,11 @@
"color-convert"
:
"^1.9.0"
}
},
"append-field"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz"
,
"integrity"
:
"sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
},
"array-flatten"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
...
...
@@ -196,6 +210,43 @@
"isarray"
:
"^1.0.0"
}
},
"buffer-from"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"
,
"integrity"
:
"sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
},
"busboy"
:
{
"version"
:
"0.2.14"
,
"resolved"
:
"https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz"
,
"integrity"
:
"sha1-bCpiLvz0fFe7vh4qnDetNseSVFM="
,
"requires"
:
{
"dicer"
:
"0.2.5"
,
"readable-stream"
:
"1.1.x"
},
"dependencies"
:
{
"isarray"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
,
"integrity"
:
"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream"
:
{
"version"
:
"1.1.14"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
,
"integrity"
:
"sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.1"
,
"isarray"
:
"0.0.1"
,
"string_decoder"
:
"~0.10.x"
}
},
"string_decoder"
:
{
"version"
:
"0.10.31"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
,
"integrity"
:
"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"bytes"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz"
,
...
...
@@ -206,6 +257,17 @@
"resolved"
:
"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
,
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"cfb"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/cfb/-/cfb-1.1.4.tgz"
,
"integrity"
:
"sha512-rwFkl3aFO3f+ljR27YINwC0x8vPjyiEVbYbrTCKzspEf7Q++3THdfHVgJYNUbxNcupJECrLX+L40Mjm9hm/Bgw=="
,
"requires"
:
{
"adler-32"
:
"~1.2.0"
,
"commander"
:
"^2.16.0"
,
"crc-32"
:
"~1.2.0"
,
"printj"
:
"~1.1.2"
}
},
"chalk"
:
{
"version"
:
"2.4.2"
,
"resolved"
:
"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
,
...
...
@@ -224,6 +286,22 @@
"is-regex"
:
"^1.0.3"
}
},
"codepage"
:
{
"version"
:
"1.14.0"
,
"resolved"
:
"https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz"
,
"integrity"
:
"sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k="
,
"requires"
:
{
"commander"
:
"~2.14.1"
,
"exit-on-epipe"
:
"~1.0.1"
},
"dependencies"
:
{
"commander"
:
{
"version"
:
"2.14.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.14.1.tgz"
,
"integrity"
:
"sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw=="
}
}
},
"color-convert"
:
{
"version"
:
"1.9.3"
,
"resolved"
:
"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz"
,
...
...
@@ -245,11 +323,27 @@
"delayed-stream"
:
"~1.0.0"
}
},
"commander"
:
{
"version"
:
"2.17.1"
,
"resolved"
:
"https://registry.npmjs.org/commander/-/commander-2.17.1.tgz"
,
"integrity"
:
"sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
},
"concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream"
:
{
"version"
:
"1.6.2"
,
"resolved"
:
"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz"
,
"integrity"
:
"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw=="
,
"requires"
:
{
"buffer-from"
:
"^1.0.0"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^2.2.2"
,
"typedarray"
:
"^0.0.6"
}
},
"constantinople"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz"
,
...
...
@@ -293,6 +387,15 @@
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
,
"integrity"
:
"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"crc-32"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz"
,
"integrity"
:
"sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA=="
,
"requires"
:
{
"exit-on-epipe"
:
"~1.0.1"
,
"printj"
:
"~1.1.0"
}
},
"crypto-js"
:
{
"version"
:
"4.0.0"
,
"resolved"
:
"https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz"
,
...
...
@@ -314,6 +417,11 @@
"ms"
:
"2.0.0"
}
},
"deepmerge"
:
{
"version"
:
"3.2.0"
,
"resolved"
:
"https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz"
,
"integrity"
:
"sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow=="
},
"delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
...
...
@@ -329,6 +437,38 @@
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"dicer"
:
{
"version"
:
"0.2.5"
,
"resolved"
:
"https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz"
,
"integrity"
:
"sha1-WZbAhrszIYyBLAkL3cCc0S+stw8="
,
"requires"
:
{
"readable-stream"
:
"1.1.x"
,
"streamsearch"
:
"0.1.2"
},
"dependencies"
:
{
"isarray"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
,
"integrity"
:
"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream"
:
{
"version"
:
"1.1.14"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz"
,
"integrity"
:
"sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
,
"requires"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.1"
,
"isarray"
:
"0.0.1"
,
"string_decoder"
:
"~0.10.x"
}
},
"string_decoder"
:
{
"version"
:
"0.10.31"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
,
"integrity"
:
"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"doctypes"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz"
,
...
...
@@ -381,6 +521,41 @@
"resolved"
:
"https://registry.npmjs.org/events/-/events-1.1.1.tgz"
,
"integrity"
:
"sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"excel4node"
:
{
"version"
:
"1.7.2"
,
"resolved"
:
"https://registry.npmjs.org/excel4node/-/excel4node-1.7.2.tgz"
,
"integrity"
:
"sha512-3XSsPSSbUeGloTRQMTmgf4aA1WDGa9fWQitOCGN/URG8NvwPjgVdbyG7FWKukqTdl5XBz9jv0vVBz3BBIo52tg=="
,
"requires"
:
{
"deepmerge"
:
"3.2.0"
,
"image-size"
:
"0.7.2"
,
"jszip"
:
"3.2.1"
,
"lodash.get"
:
"4.4.2"
,
"lodash.isequal"
:
"4.5.0"
,
"lodash.isundefined"
:
"3.0.1"
,
"lodash.reduce"
:
"4.6.0"
,
"lodash.uniqueid"
:
"4.0.1"
,
"mime"
:
"2.4.0"
,
"uuid"
:
"3.3.2"
,
"xmlbuilder"
:
"11.0.1"
},
"dependencies"
:
{
"mime"
:
{
"version"
:
"2.4.0"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-2.4.0.tgz"
,
"integrity"
:
"sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w=="
},
"xmlbuilder"
:
{
"version"
:
"11.0.1"
,
"resolved"
:
"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz"
,
"integrity"
:
"sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
}
}
},
"exit-on-epipe"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz"
,
"integrity"
:
"sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
},
"express"
:
{
"version"
:
"4.16.4"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.16.4.tgz"
,
...
...
@@ -519,6 +694,11 @@
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
,
"integrity"
:
"sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
},
"frac"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/frac/-/frac-1.1.2.tgz"
,
"integrity"
:
"sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
},
"fresh"
:
{
"version"
:
"0.5.2"
,
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
...
...
@@ -598,6 +778,16 @@
"resolved"
:
"https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz"
,
"integrity"
:
"sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
},
"image-size"
:
{
"version"
:
"0.7.2"
,
"resolved"
:
"https://registry.npmjs.org/image-size/-/image-size-0.7.2.tgz"
,
"integrity"
:
"sha512-CBmVIFHyDyiWi1U24eNHl8SH0Iir2IgmEv1RwdRVZxWsEbSCvV5b/eXaYP8epOFv2dbw5uNBOrn1Nc5P5KvsUA=="
},
"immediate"
:
{
"version"
:
"3.0.6"
,
"resolved"
:
"https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"
,
"integrity"
:
"sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"inherits"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
...
...
@@ -706,11 +896,55 @@
"promise"
:
"^7.0.1"
}
},
"jszip"
:
{
"version"
:
"3.2.1"
,
"resolved"
:
"https://registry.npmjs.org/jszip/-/jszip-3.2.1.tgz"
,
"integrity"
:
"sha512-iCMBbo4eE5rb1VCpm5qXOAaUiRKRUKiItn8ah2YQQx9qymmSAY98eyQfioChEYcVQLh0zxJ3wS4A0mh90AVPvw=="
,
"requires"
:
{
"lie"
:
"~3.3.0"
,
"pako"
:
"~1.0.2"
,
"readable-stream"
:
"~2.3.6"
,
"set-immediate-shim"
:
"~1.0.1"
}
},
"lie"
:
{
"version"
:
"3.3.0"
,
"resolved"
:
"https://registry.npmjs.org/lie/-/lie-3.3.0.tgz"
,
"integrity"
:
"sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="
,
"requires"
:
{
"immediate"
:
"~3.0.5"
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"lodash.get"
:
{
"version"
:
"4.4.2"
,
"resolved"
:
"https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz"
,
"integrity"
:
"sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.isequal"
:
{
"version"
:
"4.5.0"
,
"resolved"
:
"https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz"
,
"integrity"
:
"sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"lodash.isundefined"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz"
,
"integrity"
:
"sha1-I+89lTVWUgOmbO/VuDD4SJEa+0g="
},
"lodash.reduce"
:
{
"version"
:
"4.6.0"
,
"resolved"
:
"https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz"
,
"integrity"
:
"sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs="
},
"lodash.uniqueid"
:
{
"version"
:
"4.0.1"
,
"resolved"
:
"https://registry.npmjs.org/lodash.uniqueid/-/lodash.uniqueid-4.0.1.tgz"
,
"integrity"
:
"sha1-MmjyanyI5PSxdY1nknGBTjH6WyY="
},
"media-typer"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
,
...
...
@@ -752,6 +986,19 @@
"brace-expansion"
:
"^1.1.7"
}
},
"minimist"
:
{
"version"
:
"1.2.5"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz"
,
"integrity"
:
"sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"mkdirp"
:
{
"version"
:
"0.5.5"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
,
"integrity"
:
"sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="
,
"requires"
:
{
"minimist"
:
"^1.2.5"
}
},
"moment"
:
{
"version"
:
"2.26.0"
,
"resolved"
:
"https://registry.npmjs.org/moment/-/moment-2.26.0.tgz"
,
...
...
@@ -774,6 +1021,21 @@
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"multer"
:
{
"version"
:
"1.4.2"
,
"resolved"
:
"https://registry.npmjs.org/multer/-/multer-1.4.2.tgz"
,
"integrity"
:
"sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg=="
,
"requires"
:
{
"append-field"
:
"^1.0.0"
,
"busboy"
:
"^0.2.11"
,
"concat-stream"
:
"^1.5.2"
,
"mkdirp"
:
"^0.5.1"
,
"object-assign"
:
"^4.1.1"
,
"on-finished"
:
"^2.3.0"
,
"type-is"
:
"^1.6.4"
,
"xtend"
:
"^4.0.0"
}
},
"mysql"
:
{
"version"
:
"2.18.1"
,
"resolved"
:
"https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz"
,
...
...
@@ -813,6 +1075,11 @@
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"integrity"
:
"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
"pako"
:
{
"version"
:
"1.0.11"
,
"resolved"
:
"https://registry.npmjs.org/pako/-/pako-1.0.11.tgz"
,
"integrity"
:
"sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"parseurl"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
...
...
@@ -852,6 +1119,11 @@
"resolved"
:
"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
,
"integrity"
:
"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"printj"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/printj/-/printj-1.1.2.tgz"
,
"integrity"
:
"sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ=="
},
"process-nextick-args"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
...
...
@@ -1122,6 +1394,11 @@
"send"
:
"0.16.2"
}
},
"set-immediate-shim"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz"
,
"integrity"
:
"sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
},
"setprototypeof"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz"
,
...
...
@@ -1132,6 +1409,14 @@
"resolved"
:
"https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz"
,
"integrity"
:
"sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"ssf"
:
{
"version"
:
"0.10.3"
,
"resolved"
:
"https://registry.npmjs.org/ssf/-/ssf-0.10.3.tgz"
,
"integrity"
:
"sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w=="
,
"requires"
:
{
"frac"
:
"~1.1.2"
}
},
"sshpk"
:
{
"version"
:
"1.16.1"
,
"resolved"
:
"https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
,
...
...
@@ -1153,6 +1438,11 @@
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz"
,
"integrity"
:
"sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
},
"streamsearch"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz"
,
"integrity"
:
"sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
},
"string_decoder"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
,
...
...
@@ -1217,6 +1507,11 @@
"mime-types"
:
"~2.1.24"
}
},
"typedarray"
:
{
"version"
:
"0.0.6"
,
"resolved"
:
"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
,
"integrity"
:
"sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
},
"uid-safe"
:
{
"version"
:
"2.1.5"
,
"resolved"
:
"https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz"
,
...
...
@@ -1300,6 +1595,26 @@
"babel-walk"
:
"3.0.0-canary-5"
}
},
"wmf"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz"
,
"integrity"
:
"sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
},
"xlsx"
:
{
"version"
:
"0.16.2"
,
"resolved"
:
"https://registry.npmjs.org/xlsx/-/xlsx-0.16.2.tgz"
,
"integrity"
:
"sha512-XTqOy7YpCUtGbvCYaCh1t1RsZ/y8cSCbZCOYtqqZ4/EmHkyv+/ghxmCvvR8yc4Tn5fhny+3j7voKwJaRlffNKA=="
,
"requires"
:
{
"adler-32"
:
"~1.2.0"
,
"cfb"
:
"^1.1.4"
,
"codepage"
:
"~1.14.0"
,
"commander"
:
"~2.17.1"
,
"crc-32"
:
"~1.2.0"
,
"exit-on-epipe"
:
"~1.0.1"
,
"ssf"
:
"~0.10.3"
,
"wmf"
:
"~1.0.1"
}
},
"xml2js"
:
{
"version"
:
"0.4.19"
,
"resolved"
:
"https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz"
,
...
...
@@ -1313,6 +1628,11 @@
"version"
:
"9.0.7"
,
"resolved"
:
"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz"
,
"integrity"
:
"sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
},
"xtend"
:
{
"version"
:
"4.0.2"
,
"resolved"
:
"https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
,
"integrity"
:
"sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
}
}
}
...
...
backend/package.json
View file @
0e2c784
...
...
@@ -11,15 +11,18 @@
"crypto-js"
:
"^4.0.0"
,
"debug"
:
"~2.6.9"
,
"ejs"
:
"^3.1.3"
,
"excel4node"
:
"^1.7.2"
,
"express"
:
"~4.16.1"
,
"express-session"
:
"^1.17.1"
,
"formidable"
:
"^1.2.2"
,
"http-errors"
:
"~1.6.3"
,
"moment"
:
"^2.26.0"
,
"morgan"
:
"~1.9.1"
,
"multer"
:
"^1.4.2"
,
"mysql"
:
"^2.18.1"
,
"passport"
:
"^0.4.1"
,
"pug"
:
"^3.0.0"
,
"request"
:
"^2.88.2"
"request"
:
"^2.88.2"
,
"xlsx"
:
"^0.16.2"
}
}
...
...
backend/routes/contact.js
0 → 100644
View file @
0e2c784
var
express
=
require
(
'express'
);
var
router
=
express
.
Router
();
const
XLSX
=
require
(
'xlsx'
);
var
multer
=
require
(
'multer'
);
var
fs
=
require
(
'fs'
);
var
xl
=
require
(
'excel4node'
);
// var pool = require('./../routes/modules/database');
//파일 저장위치와 파일이름 설정
var
storage
=
multer
.
diskStorage
({
destination
:
function
(
req
,
file
,
cb
)
{
cb
(
null
,
'public/upload'
);
},
//파일이름 설정
filename
:
function
(
req
,
file
,
cb
)
{
cb
(
null
,
file
.
originalname
);
}
})
//파일 업로드 모듈
var
upload
=
multer
({
storage
:
storage
})
// 연락처 백업, 삭제, 검색
/*
contact_upload : 연락처 파일 업로드 모듈
input : 사용자가 연락처를 저장해놓은 csv 혹은 xlsx 파일
output : 연락처 저장 성공 여부
*/
router
.
post
(
'/contact_upload'
,
upload
.
single
(
'file'
),
function
(
req
,
res
,
next
)
{
// console.log(req);
var
user_id
=
req
.
query
.
id
;
var
file
=
req
.
file
;
var
workbook
=
XLSX
.
readFile
(
'public/upload/contact.xlsx'
);
var
firstWSheetName
=
workbook
.
SheetNames
[
0
];
var
firstWSheet
=
workbook
.
Sheets
[
firstWSheetName
];
var
name
=
[];
var
phone
=
[];
var
email
=
[];
var
added_date
=
[];
var
length
=
firstWSheet
[
'!ref'
][
4
];
var
temp
=
""
;
var
sqlquery
=
"insert into contact(user_id,name,email,phone,added_date) values"
;
for
(
var
i
=
1
;
i
<
length
;
i
++
)
{
for
(
var
j
=
0
;
j
<
4
;
j
++
)
{
if
(
j
==
0
){
temp
=
"A"
+
(
i
+
1
);
name
.
push
(
firstWSheet
[
temp
].
v
);
sqlquery
+=
' ("'
+
user_id
+
'","'
+
name
[
i
-
1
];
}
else
if
(
j
==
1
){
temp
=
"B"
+
(
i
+
1
);
phone
.
push
(
firstWSheet
[
temp
].
v
);
sqlquery
+=
'","'
+
phone
[
i
-
1
];
}
else
if
(
j
==
2
){
temp
=
"C"
+
(
i
+
1
);
email
.
push
(
firstWSheet
[
temp
].
v
);
sqlquery
+=
'","'
+
email
[
i
-
1
];
}
else
if
(
j
==
3
){
temp
=
"D"
+
(
i
+
1
);
added_date
.
push
(
firstWSheet
[
temp
].
v
);
sqlquery
+=
'",STR_TO_DATE("'
+
added_date
[
i
-
1
]
+
'",'
+
"'%Y.%m.%d')),"
;
}
}
}
sqlquery
=
sqlquery
.
substring
(
0
,
sqlquery
.
length
-
1
);
connection
.
query
(
sqlquery
,
function
(
err
,
rows
)
{
if
(
err
)
{
console
.
log
(
"upload contact failed"
);
throw
err
;
}
else
{
console
.
log
(
rows
);
var
filename
=
'public/upload/contact.xlsx'
;
fs
.
unlink
(
filename
,
function
(
err
)
{
if
(
err
)
throw
err
;
console
.
log
(
'file deleted'
);
})
res
.
status
(
200
).
send
(
'upload'
);
}
});
});
/*
contact_download : 연락처 파일 다운로드 모듈
input : 사용자의 연락처 다운로드 요청
output : 연락처 다운로드 성공 여부 및 csv, xlsx 파일
*/
router
.
post
(
'/contact_download'
,
function
(
req
,
res
,
next
)
{
var
filename
=
'public/upload/contactdownload.xlsx'
;
fs
.
exists
(
filename
,
function
(
exists
)
{
if
(
exists
==
true
)
{
fs
.
unlink
(
filename
,
function
(
err
)
{
if
(
err
)
throw
err
;
});
}
});
// Create a new instance of a Workbook class
var
wb
=
new
xl
.
Workbook
();
// Add Worksheets to the workbook
var
ws
=
wb
.
addWorksheet
(
'Sheet 1'
);
ws
.
cell
(
1
,
1
)
.
string
(
'name'
);
ws
.
cell
(
1
,
2
)
.
string
(
'phone'
);
ws
.
cell
(
1
,
3
)
.
string
(
'email'
);
ws
.
cell
(
1
,
4
)
.
string
(
'added_date'
);
var
user_id
=
req
.
query
.
id
;
var
sqlquery
=
"SELECT * FROM contact WHERE user_id = ?"
;
connection
.
query
(
sqlquery
,
[
user_id
],
function
(
err
,
rows
)
{
if
(
err
)
{
console
.
log
(
"download contact failed"
);
throw
err
;
}
else
{
if
(
rows
.
length
!=
0
)
{
for
(
var
i
=
0
;
i
<
rows
.
length
;
i
++
)
{
ws
.
cell
(
i
+
2
,
1
).
string
(
rows
[
i
].
name
);
ws
.
cell
(
i
+
2
,
2
).
string
(
rows
[
i
].
phone
);
ws
.
cell
(
i
+
2
,
3
).
string
(
rows
[
i
].
email
);
ws
.
cell
(
i
+
2
,
4
).
string
(
rows
[
i
].
added_date
);
}
}
wb
.
write
(
'public/upload/contactdownload.xlsx'
,
(
err
,
stats
)
=>
{
if
(
err
){
throw
err
;
}
else
{
res
.
sendFile
(
path
.
join
(
__dirname
,
'../public/upload/contactdownload.xlsx'
));
}
});
}
});
});
/*
contact_create : 연락처 생성 모듈
input : 사용자의 연락처 생성 요청
output : 연락처 생성 성공 여부
사용자한테 연락처 정보 받아오기
*/
router
.
get
(
'/contact_create'
,
function
(
req
,
res
,
next
)
{
//insert into contact(name) value ("daso")
});
/*
contact_delete : 연락처 삭제 모듈
input : 사용자의 연락처 삭제 요청
output : 연락처 삭제 성공 여부
*/
router
.
post
(
'/contact_delete'
,
function
(
req
,
res
,
next
)
{
// console.log("req.query",req.query);
var
user_id
=
req
.
query
.
id
;
var
sqlquery
=
"DELETE FROM contact WHERE user_id = ?"
;
connection
.
query
(
sqlquery
,
[
user_id
],
function
(
err
,
rows
)
{
if
(
err
)
{
console
.
log
(
"delete contact failed"
);
throw
err
;
}
else
{
// console.log(rows);s
res
.
status
(
200
).
send
(
"delete"
);
}
});
});
/*
contact_search : 연락처 검색 모듈
input : 사용자가 이름, 전화번호, 이메일 중 하나를 검색
output : 검색을 요청한 데이터에 부합하는 연락처를 찾았다면 출력
*/
router
.
post
(
'/contact_search'
,
function
(
req
,
res
,
next
)
{
console
.
log
(
"req.query"
,
req
.
query
);
var
user_id
=
req
.
query
.
id
;
var
type
=
req
.
query
.
type
;
var
info
=
""
;
if
(
type
==
"name"
)
{
info
=
req
.
query
.
name
;
var
sqlquery
=
"SELECT * FROM contact WHERE user_id = ? and name = ?"
;
}
else
if
(
type
==
"phone"
)
{
info
=
req
.
query
.
phone
;
var
sqlquery
=
"SELECT * FROM contact WHERE user_id = ? and phone = ?"
;
}
else
if
(
type
==
"email"
)
{
info
=
req
.
query
.
email
;
var
sqlquery
=
"SELECT * FROM contact WHERE user_id = ? and email = ?"
;
}
console
.
log
(
sqlquery
);
connection
.
query
(
sqlquery
,
[
user_id
,
info
],
function
(
err
,
rows
)
{
if
(
err
)
{
console
.
log
(
"search contact failed"
);
throw
err
;
}
else
{
console
.
log
(
rows
);
res
.
status
(
200
).
send
({
contact_list
:
rows
});
}
});
});
/*
contact_list : 연락처 출력 모듈
input : 사용자의 연락처 출력 요청
output : 저장된 연락처 목록 출력
*/
router
.
post
(
'/contact_list'
,
function
(
req
,
res
,
next
)
{
console
.
log
(
"req.query"
,
req
.
query
);
var
user_id
=
req
.
query
.
id
;
var
sqlquery
=
"SELECT * FROM contact WHERE user_id = ?"
;
connection
.
query
(
sqlquery
,
[
user_id
],
function
(
err
,
rows
)
{
if
(
err
)
{
console
.
log
(
"select contact failed"
);
throw
err
;
}
else
{
console
.
log
(
rows
);
res
.
status
(
200
).
send
({
contact_list
:
rows
});
}
});
});
module
.
exports
=
router
;
backend/routes/modules/config.js
View file @
0e2c784
Please
register
or
login
to post a comment