Search

'모바일/nodejs'에 해당되는 글 6건

  1. 2021.01.10 nodejs + postgresql
  2. 2021.01.07 nodejs + multer 파일 업로드
  3. 2021.01.07 nodejs + s3 upload/get
  4. 2021.01.07 node-schedule-tz
  5. 2020.12.24 express
  6. 2020.12.24 debugger

nodejs + postgresql

모바일/nodejs 2021. 1. 10. 13:12 Posted by 아는 개발자

nodejs로 postgresql 데이터베이스를 사용하는 방법. 엄청 간단하다. 

 

먼저 pg 라이브러리를 npm으로 설치한 후

 

npm install pg // pg library install

 

host 주소랑 포트번호 그리고 유저 정보들을 담은 오브젝트를 만든 후 pg client를 생성해 연결을 시켜준다.

 

const dbconfig = {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PW,
    database: process.env.DB_NAME,
    port: process.env.DB_PORT,
    ssl: {
        rejectUnauthorized: false
    }
}

const client = new pg.Client(dbconfig)

client.connect(err => {
    if (err) {
        console.log('Failed to connect db ' + err)
    } else {
        console.log('Connect to db done!')
    }
})

 

정상적으로 연결이 완료 되면 선언한 pg client 객체를 이용해 db 쿼리를 날린다. 결과 값은 promise의 형태로도 받을 수 있는데 여기선 비동기 콜백을 피하고자 await로 받았다. 쿼리 결과 값은 리턴 객체의 rows 배열에 있으니 얘를 잘 써먹으면 된다.

 

rows() = () => client.query('select * from tb_table')

router.get('/api/v1/rows', async (req, res) => {
    try {
        const rowQuery = await rows();
        const resp = response.Builder.buildOkResponse({
            row: rowQuery.rows.map()
        })

 

 

728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24

nodejs + multer 파일 업로드

모바일/nodejs 2021. 1. 7. 20:07 Posted by 아는 개발자

multer 라는 npm 라이브러리를 사용하면 nodejs로 쉽게 파일 업로드 api를 구축 할 수 있다. multer 라이브러리를 설치하고 내부 함수인 diskStorage 로 저장 받는 파일의 장소와 저장하게될 파일 이름을 설정하자. destination 필드에 파일 다운 받을 경로를 정하고 filename 필드에 다운 받는 파일 이름을 정한다. 그리고 정해둔 값으로 multer 오브젝트를 생성한다.

 

const multer = require('multer')
const path = require('path')

const storage = multer.diskStorage(
    {
        destination: './uploads',
        filename: function (req, file, cb) {
            cb(null, Date.now() + path.extname(file.originalname))
        }
    }
)

const upload = multer( { storage: storage } )

 

api 에서는 마지막에 생성한 multer 오브젝트를 middleware로 넣어주는데 파일 필드로 받을 key 값을 같이 넣어준다. 아래 api에서는 image라는 필드로 정했다. 이렇게 api를 설정하고 post 명령으로 호출하면 uploads 폴더에 파일이 생긴다.

 

router.post('/media/image', upload.single('image'), async(req, res) => {
    try {
        res.status(200).send()
    } catch (error) {
        console.log(error)
        res.status(400).send(error)
    }
})

 

 

728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24

nodejs + s3 upload/get

모바일/nodejs 2021. 1. 7. 19:56 Posted by 아는 개발자

nodejs로 AWS S3 스토리지에 업로드를 하기 위해선 먼저 S3 access 권한을 갖고 있는 IAM 사용자가 있어야 한다. 이것까지 설명하면 어려우니 아래 사진과 같은 권한을 가진 사용자가 필요하다는 것을 먼저 알아두자. 

 

 

사용자를 만들면 accessKeyId랑 secretAccessKey를 받는다. 이 string 값을 이용해 nodejs의 AWS S3 오브젝트를 만든다

 

const AWS = require('aws-sdk')

const s3 = new AWS.S3({
    accessKeyId: process.env.S3_ACCESS_KEY_ID,
    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY
})

 

만든 객체로 s3 고유 함수를 호출 할 수 있다. 업로드의 인자에는 s3 버킷을 식별 할 수 있는 정보인 버킷 이름(Bucket), 권한 정보(ACL), 컨텐츠 타입 (ContentType), 보낼 파일 스트림 (Body), 파일 저장 경로(Key)를 입력한다. 아래 코드는 sync하게 호출하고자 promise() 함수까지 호출 했는데 원래는 비동기 함수라 .then, catch 함수도 호출이 가능하다.

 

const createUploadParam = (filePath) => {
    return {
        'Bucket': process.env.S3_BUCKET_NAME,
        'ACL': 'public-read',
        'ContentType': 'image/' + path.extname(filePath).substring(1),
        'Body': fs.createReadStream(filePath),
        'Key': moment().format("YYYY-MM-DD") + '/' + path.parse(filePath).base
    }
}

exports.uploadImage = async (filePath) => {
    return await s3.upload(createUploadParam(filePath)).promise()
}

 

파일 가져 올 때도 비슷하게 버킷의 정보가 필요하다. 단 이때는 버킷 이름과, 파일 경로만 있으면 된다. headObject 함수로 파일의 유무를 확인 한 후 있으면 getObject 함수로 파일에 대한 stream을 받을 수 있다

 

exports.createReadParam = (filePath) => {
    return {
        'Bucket': process.env.S3_BUCKET_NAME,
        'Key': filePath
    }
}

s.headObject(createReadParam(filePath)).on('success',() =>{
    s.getObject(param).createReadStream().pipe()
})
728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24

node-schedule-tz

모바일/nodejs 2021. 1. 7. 19:28 Posted by 아는 개발자

node-cron 이란 라이브러리를 사용하면 몇 시간이나 몇 일을 주기로 특정 작업을 반복해서 실행 할 수 있지만 내가 원하는 시간대에 실행하는 것은 어렵다. 예로 매일 23시 55분에 실행하는 작업을 만드려면 cron 실행을 23시 55분부터 실행하도록 하거나 아니면 1분 주기로 재실행해서 23시 55분이 지났는지 확인해야하는데 이건 번거롭다.

 

이럴때는 node-schedule이란 라이브러리를 이용하면 된다. 이 라이브러리는 특정 작업을 언제 실행할 것인지 설정 할 수 있다. cron과 거의 비슷한데 내가 작업 시간을 설정 할 수 있다는 점에서 다르다. 

 

아래 코드는 매시 42분 마다 실행되는 코드다. 2시 42분, 3시 42분마다 아래 코드가 실행된다.

 

var schedule = require('node-schedule');
 
var j = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

 

scheduleJob 첫번째 인자에 들어가는 위치별로 분, 시, 일, 월, 요일을 정해줄 수 있다. 모두 포함하고 싶으면 별표를 넣으면 된다.

 

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ day of week (0 - 7) (0 or 7 is Sun)
│    │    │    │    └───── month (1 - 12)
│    │    │    └────────── day of month (1 - 31)
│    │    └─────────────── hour (0 - 23)
│    └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)

 

node-schedule-tz 라이브러리는 time zone까지 설정할 수 있다. 그냥 node-schedule 라이브러리를 쓰면 서버 시간에 맞춰지는데 다른 국가에 서버가 있는 경우에는 맞지 않을 경우가 있다. 이때는 node-schedule-tz 라이브러리로 타임존까지 맞춰주자. 아래 코드는 서울 시간 기준으로 매일 23시 59분에 실행되도록 스케줄링 한 예다.

 

const schedule = require('node-schedule-tz')

const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [0, new schedule.Range(0, 6)];
rule.hour = 23;
rule.minute = 59;
rule.tz = 'Asia/Seoul';

module.exports = schedule.scheduleJob(rule, () => {
    console.log('called every 23:59 pm')
})
728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24

express

모바일/nodejs 2020. 12. 24. 21:29 Posted by 아는 개발자

nodejs로 서버를 만들 때 유용한 웹 애플리케이션 프레임 워크. 사실상 nodejs의 표준 서버 프레임워크라 봐도 무방하다. 몇몇 함수에 대해서 알아보자.

 

listen 

 

첫번째 인자로 포트 번호를 받고 두번째는 콜백 함수다. 몇번 포트에 서버를 만들 것인지 정하는 함수다.

 

const express = require("express")

const app = express() 

...

app.listen(3000, () => {
    console.log('Server is up on port 3000')
})

 

get, post

 

외부로부터 http GET, POST 요청을 처리 할 수 있다. 콜백함수에서는 요청 인자와 응답 인자를 받으며 응답 인자를 이용해 값을 전달 할 수 있다. 

 

app.get('', (req, res) => {
    res.send('GET request express')
})

app.post('', function (req, res) {
    res.send('POST request to the homepage');
});

 

route 

 

동일한 get, post 주소를 하나로 묶어서 처리하는 것도 가능하다

 

app.route('')
    .get((req, res) => {
        res.send('Hello express')
    })
    .post((req, res) => {
        res.send('POST request to the homepage'); 
    })

 

response method 

 

응답값은 여러가지가 가능하다. 

 

728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24

debugger

모바일/nodejs 2020. 12. 24. 20:58 Posted by 아는 개발자

nodejs 도 android studio 나 jetbrain 처럼 강력한 디버깅 툴을 지원한다. 이번 포스트에서는 간단한 사용법을 정리해본다. 

 

1. 코드 내에 중단점 넣기 

 

작업을 중단하고 싶은 특정 위치에 debugger 라는 코드를 끼워 넣는다. nodejs 기본 라이브러리기 때문에 별도의 module 추가는 필요 없다.

 

const fs = require('fs')
const chalk = require('chalk')

const addNote = (title, body) => {
    const notes = loadNotes()
    const duplicateNote = notes.find((note) => note.title === title)

    debugger

    if (!duplicateNote) {
        notes.push({

 

2. 디버깅용 명령어 실행 

 

원래 실행하던 명령어 앞에 inspect를 붙여준다. 디버깅용으로 nodejs가 실행된다. 

 

node inspect app.js add --title="Courses" --body="Note.js"

 

3. chrome://inspect 실행 

 

크롬 브라우저에서 chrome://inspect 주소를 쳐보면 그림 처럼 Remote Target 리스트에 현재 실행하고 있는 node js 프로세스가 보인다. inspect 버튼을 클릭해보자.

 

4. 디버깅 시작 

 

Sources 탭에 들어가면 현재 실행하고 있는 코드가 라인별로 나온다. 오른쪽 상단의 more 버튼을 클릭하면 command 창을 열 수 있고 이거로 각 인자의 값을 볼 수도 있으니 조사식으로 적극적으로 이용하자. 또한 콜스택을 통해서 어떤 순서로 작업이 실행되고 있는지 알 수 있다.

728x90

'모바일 > nodejs' 카테고리의 다른 글

nodejs + postgresql  (0) 2021.01.10
nodejs + multer 파일 업로드  (0) 2021.01.07
nodejs + s3 upload/get  (0) 2021.01.07
node-schedule-tz  (0) 2021.01.07
express  (0) 2020.12.24
debugger  (0) 2020.12.24