개발
-
cannot find module - heroku개발/삽질 기록 2021. 1. 10. 11:01
파일 이름을 리팩토링 한 후 새롭게 배포를 했더니 heroku에서 파일을 찾을 수 없다는 에러가 발생하게 됐다. 분명 로컬에서는 아무 문제 없이 제대로 돌아가고 있는데 heroku에 deploy하면 file을 찾을 수 없다는 에러가 발생했다. 2021-01-10T01:25:18.946380+00:00 app[web.1]: mytrot development mode 2021-01-10T01:25:19.123710+00:00 app[web.1]: internal/modules/cjs/loader.js:883 2021-01-10T01:25:19.123711+00:00 app[web.1]: throw err; 2021-01-10T01:25:19.123712+00:00 app[web.1]: ^ 2021-01-10..
-
nodejs + multer 파일 업로드개발/nodejs 2021. 1. 7. 20:07
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..
-
nodejs + s3 upload/get개발/nodejs 2021. 1. 7. 19:56
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 고유 함수를 호출 할 수 있다. 업로드의 인..
-
node-schedule-tz개발/nodejs 2021. 1. 7. 19:28
node-cron 이란 라이브러리를 사용하면 몇 시간이나 몇 일을 주기로 특정 작업을 반복해서 실행 할 수 있지만 내가 원하는 시간대에 실행하는 것은 어렵다. 예로 매일 23시 55분에 실행하는 작업을 만드려면 cron 실행을 23시 55분부터 실행하도록 하거나 아니면 1분 주기로 재실행해서 23시 55분이 지났는지 확인해야하는데 이건 번거롭다. 이럴때는 node-schedule이란 라이브러리를 이용하면 된다. 이 라이브러리는 특정 작업을 언제 실행할 것인지 설정 할 수 있다. cron과 거의 비슷한데 내가 작업 시간을 설정 할 수 있다는 점에서 다르다. 아래 코드는 매시 42분 마다 실행되는 코드다. 2시 42분, 3시 42분마다 아래 코드가 실행된다. var schedule = require('nod..
-
express개발/nodejs 2020. 12. 24. 21:29
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,..
-
debugger개발/nodejs 2020. 12. 24. 20:58
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) { no..
-
useContext개발/react 2020. 12. 22. 21:09
useContext를 사용하면 하위 컴포넌트에서도 상위 컴포넌트에서 전달하는 값을 공유 받을 수 있다. props를 통해서 전달하지 않고 동일한 Context를 넘겨 받은 인자를 통해서 공유가 가능하다. 이 함수를 이용해 state 값과 이를 업데이트 하는 dispatch 함수를 컴포넌트끼리 공유 할 수 있다. 1. Context 만들기 하위 컴포넌트에서 공통적으로 공유할 수 있는 React Context를 만든다. import React from 'react'; const NotesContext = React.createContext() export { NotesContext as default } 2. Context 공유하기 공유를 시작하려는 가장 상위 컴포넌트에서 태그를 씌워준다. value 안에 ..
-
useReducer개발/react 2020. 12. 22. 20:59
useReducer는 useState랑 비슷하나 state 업데이트 작업을 담당하는 reducer를 직접 넣어 줄 수 있다는 점이 다르다. 아래 코드에서 주석으로 처리된 useState 코드는 두번째 인자로 state 값을 업데이트 하는 작업을 일괄 담당했는데, useReducer를 사용하면 커스텀 reducer를 추가할 수 있어 action의 타입에 따라서 다른 행동을 취하도록 할 수 있다. useReducer도 useState처럼 리턴 값은 배열이며 첫번째 인자는 state 값이고 두번째 인자는 reducer에 액션을 보낼 수 있는 dispatch 함수다. 값을 업데이트 할 때는 dispatch 함수에 action 을 설정해서 업데이트 한다. import React, { useEffect, useRe..