블로그 내 코드 자료 출처
Node.js 교과서 개정2판(지음이 조현영)
이렇게 .then return에 new Promise를 사용하지 않더라도 .then을 이어갈 수 있다. 하지만 이렇게 하면 비동기 식으로 된다.
res1변수에 Promise를 담았을 뿐이다. 우리가 필요한 데이터는 Promise 자체가 아닌 Promise에서 reslove한 값이다. 그래서 resolve를 받을 수 있는 await를 사용해야한다.
npm i morgan cookie-parser express-session dotenv
실무에서는app.use(morgan('combined'))
를 자주 사용한다.
'/'주소로 시작해서, public 경로에 해당하는 정적파일 접근 가능
json으로 요청이 오면 json으로 처리하고
like라는 라우터를 사용하려면 app.get('users/:id'... 보다 위에 있어야 동작이 가능하다.
/users 반복이 심하니 express기능으로 Routes생략하는 방법
routes 폴더 생성 -> users.js 파일 생성
app.use('/users', usersRouter) /* usersRouter를 사용하는데 default로 /users 주소를 갖게 된다. // about '/users' ... */
기존
app.js
에 있던/users/...
메서드를 잘라 붙여넣기 한다.을/routes/users.js
에 담았고 위와 같이app.js 안에서 userRouter
로 module을 불러 사용한다.
class 이름 extends ~
이름은 db의 table과 같다?
Sequelize를 extends Sequelize.Model
에서 사용한다.
일반적으로 이렇게 정의해서 사용한다.
init을 class안에 넣으면 된다. table 정의다.
table은 무엇을 정의하나 바로 속성을 정의한다.
DB design을 department.js에서 한다.
return super.init({.... 해서 ...에 해당하는 내용이 DB table model에 해당하는 부분이다.
department.js 에는 name:, code:, description:으로 속성이 정의되어있고, 해당하는 타입은 type: Sequelize.STRING(50)과 같이 설정되어 있다.
STRING은 Sequelize의 prototype인듯 하다.
{
sequelize,
underscore : true //camelCase
timestamps : true //create,delete,update timestamp
paranoid : false // true: sequelize로 data 삭제시 deleteAt에 삭제한 시간만 저장하고 DB에는 남아있음
charset: 'utf8' // 문자의 format
collate: 'utf8_general_ci' // 문자의 format
}
관계 속성 foreign key/ pramary key
allowNull: false // Null 허용 안함
unique: true // 중복되면 안된다
department.js, device.js, users.js 등의 모델 파일을 종합하는 파일
Department = require('../models/department')
const department = await Department.findAll()
Department 모델을 불러와서
Department table에서 findAll()을 진행시켜라.
await로 하면 resolve된 parms을 바로 사용할 수 있다.
즉, DB Department table에서 findAll()해서 data가 있다면! const department에 담아라
라는 뜻이다.
router.route('/')
.get(.....)
.post(.....)
.route('/')
를 사용하여 .get
,.post
등 메서등에 '/'
경로를 모두 생략해 주는 것이다.
이게 실행되면 sequelize가 실행된다.
farce: true // 만약 department.js에 변경된 부분(init에 관한 속성등)을 update해줌, 최초 초기화 시에는 상관없지만 true로 하면, 잘못하면 db가 날라갈 수가 있다.
그래서 false로 하고 수정이 필요하면 query문 사용하여 table 수정한다.
data없이 test할 때는 force: true로 하면된다. 다만 data 입력 후에 실행하게 되면 기존 data가 다 날라간다.
MQTT란? 구독의 개념? 구독한 내용을 받을 수 있다.
이미지 출처: (https://skibis.tistory.com/280)
이미지 출처: (https://velog.io/@juliy9812/MQTT)
파일을 mosquitto 폴더에 덮어 씌운다.
콜라비에서 강사님 코드 다운
서비스에들어가서 mosquitto 시작
으로 설정
Qos는 data 유실없게 보내겠다는 설정 2가 유실없이 하겠다. 대신 통신 속도가 느리다.
temp로 구독해보자
여러개로 구독하기
mqtt-nodejs폴더를 만들고 해당폴더에 npm i mqtt
진행
publish.js 생성
npm i
하기
모두 package.json.lock 지우고 다시 npm i
하기
backend npm start
frontend npm run serve
frontend .env파일 사진과 같이 변경
변경 전에 npm run serve를 했다면 서버 연결 끊었다가 다시 연결하고 대시보드(localhost:8080) 새로고침 해준다.