ํฐ์คํ ๋ฆฌ ๋ทฐ
[Node.js + Vue] ๋ธ๋ผ์ฐ์ ์์ ์๋ฒ์ ์๋ ํ์ผ ๋ค์ด๋ก๋ํ๊ธฐ
๋๋์ด๋ฐ๐พ 2020. 11. 12. 19:53Node.js์ Vue (๋ฌผ๋ก ๊ธฐ๋ณธ์ ์ธ html๋ ๊ฐ๋ฅํฉ๋๋ค) ๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ๋จ์ ์๋ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ์ฝ๋์ํ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ธ express ์๋ฒ๋ฅผ ๋์ฐ๋ ์ค์ ์ด๋ ์คํํ๊ฒฝ ์ ํ ์ ์ ์ธํ์์ต๋๋ค.
[router.js]
1
2
3
4
5
|
const util = require('./util.js')
router.get('/download',(req, res, next)=>{
util.download(req, res)
})
|
cs |
์ผ๋จ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ฐํฐ ์ ํ ์ ๋๋ค. ๋จ์ํ๊ฒ /download ๋ผ๋ ๋ผ์ฐํฐ๋ก ์ง์ ํ์ ๋ util.js ํ์ผ์ ์๋ download ํจ์๋ฅผ ์คํ์์ผ์ฃผ๋ ์ฝ๋์ ๋๋ค.
[util.js]
1
2
3
4
5
6
7
8
9
10
11
|
exports.download = (req, res) => {
const date = new Date()
res.setHeader("Content-disposition", "attachment; filename="+ date.yyyymmddhhmmss() +'.csv');
res.set('Content-Type', 'text/csv');
fs.createReadStream(`./data.csv`)
.pipe(res)
.on('finish', ()=>{
console.log('download complete')
})
})
|
cs |
header๋ฅผ ์ ์ํด์ฃผ๋ ๋ถ๋ถ์ ๋จผ์ ์์ฑํฉ๋๋ค. ํ์ผ ํ์ ๊ณผ ํ์ผ ์ ์ฅ์์ ํ์ผ๋ช ์ ์์คํ ์๊ฐ์ผ๋ก ์ ์ํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ CreateReadStream์ ์ด์ฉํ์ฌ ์๋ฒ์ ์๋ ํน์ ํ์ผ์ ๋ค์ด๋ก๋ ํ ์ ์๊ฒ๋ ํ์ผ๋ช ์ ๋ฃ์ด์ค๋๋ค.
๋ง์ง๋ง์ผ๋ก pipe ๋ฉ์๋๋ฅผ ํตํด์ ํด๋น ์คํธ๋ฆผ์ response๋ก ์ ์กํฉ๋๋ค.
๋ฐฑ์๋์ชฝ ์์ ์ ๋๋ฌ์ต๋๋ค. ์ด์ ๊ฐ๋จํ๊ฒ ํ๋ก ํธ๋จ์์ ๋ฒํผ๊ณผ ํด๋น API๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
[index.vue]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<template>
<div>
<button @click="download">CSV ๋ค์ด๋ก๋</button>
</div>
</template>
<script>
export default {
name: 'download',
data() {
return {
}
},
methods: {
download() {
try {
let element = document.createElement('a');
element.setAttribute('href','/download');
element.click();
} catch(error) {
console.log(error)
}
}
},
}
</script>
|
cs |
Vue.js ์ฝ๋์ด๊ธดํ์ง๋ง, HTML์ ์์ฃผ ๋จ์ํ ์ฝ๋๋ฅผ ์ฎ๊ธด ์ฝ๋์ ๋๋ค. ํ๋ฉด์ ๋ฒํผ์ด ์๊ณ , ํด๋น ๋ฒํผ์ ๋๋ฅผ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ ํจ์๋ฅผ ์์ฑํ ์ฝ๋์ ๋๋ค. download ํจ์์๋ ๋จ์ํ๊ฒ download ๋ผ์ฐํฐ๋ฅผ ํธ์ถํ๋ ์ฝ๋๊ฐ ์ ๋ถ์ ๋๋ค.
๋ฌผ๋ก axios๋ form tag ๊ฐ์ด ๋ผ์ฐํฐ๋ฅผ ํธ์ถํ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํด๋ ๊ด์ฐฎ์ต๋๋ค.
๊ธฐ์กด ์์ค์์ ํด๋น ๊ธฐ๋ฅ๋ง ๋ฐ์ทํ์ฌ ์์ฑํ์์ต๋๋ค. ํด๋น ๋ฐฉ์์ผ๋ก ๊ตฌํํ ๋ชจ์ต์ ์๋์ ๊ฐ์ต๋๋ค.
์๋ฒ์ ์๋ ํ์ผ์ ํด๋ผ์ด์ธํธ์ PC์์ ๋ค์ด๋ก๋ ๋ฐ์ ์ ์๊ฒ ๋์์ต๋๋ค. ํ์ผ๋ช ์ ์ ์๋ฒ ์ฝ๋์์ ์์ฑํ๋ค์ํผ ์์คํ ์๊ฐ์ ์๋ถ์ด์ ํ์ผ๋ช ์ผ๋ก ๊ธฐ๋ณธ์ ํ ๋์์ต๋๋ค.
'Node.js > Node.js ์ค์ต' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
session์ผ๋ก ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (Sequelize DB ํ์ฉ) (0) | 2018.10.23 |
---|---|
sementic url ์ ์ฉํด๋ณด๊ธฐ (0) | 2018.10.10 |
callback ํจ์ ์ดํดํ๊ธฐ (0) | 2018.09.08 |
์ด๋ฏธ์ง url๊ณผ ํ์ผ์์คํ ์ ํตํ ์ด๋ฏธ์ง ๋ค์ด๋ก๋ (Flickr API ์ฌ์ฉ) (0) | 2018.09.05 |
node js async ๋ชจ๋ ์ฌ์ฉํ๊ธฐ (0) | 2018.07.20 |
- Total
- Today
- Yesterday
- Spring
- nestjs/cli
- ํ๋ก๊ทธ๋๋จธ์ค
- android
- JavaScript
- typeorm
- sequelize
- Request_Limit_Exceeded
- nestjs doc
- ์๊ณ ๋ฆฌ์ฆ
- @nestjs/config
- nestjs module
- ๊ธฐ์์ฒญAPI
- node.js
- nestjs configService
- node.js backend
- Promise error
- typeorm ์ฐ๊ฒฐ
- ๋น๋๊ธฐ ์์ฒญ
- DeferredResult
- backend-framework
- Promise bulk
- docker mysql
- nestjs config
- foreignkey
- nestjs project
- nestjs directory
- NestJS
- nestjs typeorm
- Spring Async
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |