거래소
지갑에 현금이든 코인이든 넣어서 입출금내역을 쌓아야 함
뭐 호가창이 있고 가격을 불러가지고... 최적의 가격으로 책정한다고...
대략적인 거래소의 흐름을 알아야 만들기 수월하므로 개념적인 부분은 따로 정리 해볼것.
필요요소
1. express
2. deamon (실질적인 트랜잭션이 일어나는 저장소같은 공간으로서 사용)
3. 프론트서버 (이번엔 리액트 안하고 넌작스로,, 근데 리액트로 해도된다고 함)
4. DB (얘는 필수)
설치해야 될 파일
express nunjucks request body-parser sequelize sequelize-cli mysql2
npx sequelize init
seeders 폴더 삭제 / models - index.js fs 부분 삭제/
mysql 클라이언트 접속 후 create datebase exchange; 해주기
server.js 파일 생성
views 폴더 생성 - index.html 파일 생성
-(index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
hello exchange
</body>
</html>
-(server.js)
const express = require('express');
const db = require('./models');
const app = express();
const nunjucks = require('nunjucks')
const PORT = process.env.PORT|| 3500
db.sequelize.sync({force:true})
.then( _=>{ // 그냥 변수명을 언더바로 짧게 줘서 쓰려고 한거라고..
console.log(`DB connection success`)
})
.catch(err=>{
console.log(`DB connection ${err}`)
})
app.set('view engine',"html")
nunjucks.configure('views',{express:app,})
app.get('/',(req,res)=>{
res.render('index')
})
app.listen(PORT,()=>{
console.log(`server start port ${PORT}`)
})
까지가 기본 셋팅. 완료후 터미널에서 서버 실행시켜보기.
-> 근데 그냥 하니까 실행이 안되더니 npm install express 한번 더 해주고 실행하니 실행됨.. 왠진 모르겠음..
브라우저에서 localhost:3500 확인
npm install morgan
npm install -g nodemon
morgan 세팅
- 하나의 미들웨어임 index로 들어가기 전에 먼저 실행.
따라서 app.set이나 app.get 위에 적어주는것이 좋음
이후 서버를 실행 하려면 터미널에 nodemon server.js 해주기
-----------------------
여기서 만약 nodemon으로 실행이 안되는 오류가 난다면
window powershell 관리자 권한으로 열어서? (이부분 정확치 않음)
get-ExecutionPolicy 치면
RemoteSigned // 되는거고
Restricted // 이건 안되는거
🔽
set-ExecutionPolicy Remotesigned
이후 Y누르고 엔터
--------------------------
브라우저에서 localhost:3000 새로고침 -> 이후 터미널창에 뭔가 콘솔이 찍히는것을 확인가능
주소창으로 데이터값을 보내면 그게 그대로 콘솔에 찍힘
localhost:3500/?name=munyeong 해주면
만약 여기서 index.html 수정하고 싶다면 nodemon 서버를 실행시킨 채로 내용 수정 후,
저장하고 이때 주의할 점이, nodemon 으로 서버를 키면
❕❕ 템플릿 엔진을 사용할때는 server.js 를 한번 새로 저장을 해야 변경내용이 반영된다 ❕❕
그래서 server.js를 한번 저장 눌러주고 브라우저 f5를 눌러주면 서버를 재실행 하지 않아도
수정내용이 바로 반영될 수 있다.
(사이트 레이아웃을 전체적으로 잡는 과정)
1. 페이지 404 에러 떴을 때 나오는 부분 만들기
views 폴더 - 404.html 파일 생성
미들웨어에 실어주기
----------------------
* winston
콘솔로그 찍어주는거..?
실무에서 console.log 남발하면 욕먹는다고 (무서워...) winston 이라는 기능을 배웠다..
내 모스트 챔프 윈스턴 만큼은 절대 안잊어버릴듯~~
npm install winston
logger.js 파일 생성
(logger.js)
const { format } = require('winston')
const winston = require('winston')
const logger = winston.createLogger({
level:'info',
format: format.json(),
})
if (process.env.NODE_ENV !== 'production'){
logger.add(new winston.transports.Console({format:format.simple()}))
}
module.exports = logger
이 파일은 기트헙에 한번 저장해놓으면 두고두고 쓸 수 있어서 좋다고 한다.
다시 server.js - 원래 있던 코드에 logger부분만 추가로 작성
const logger = require('./logger')
app.use((req,res,next)=>{
logger.info('hello') // 얘랑
logger.error('error입니다') // 얘 추가
res.render(`404`)
})
이제 console.log ( ) 부분을 전부 logger.info( ) 로 바꿔주자
요런 식으로 해주면 끝.
로거를 이용하면 콘솔로그로 찍는 내용들을 파일로 따로 저장하거나 에러는 빨간색으로 나오게 하는등
여러 기능이 있다!! 인터넷에 찾아보면 많이 알 수 있음.
server.js
app.use((req,res,next)=>{
const error = new Error(`${req.method} ${req.url} 정보가 없습니다`)
error.status = 404
logger.error(error.message)
res.render(`404`)
})
app.use 부분 요렇게 변경해주면
브라우저 url 오류 떴을 때
이런식으로 나옴~
2. 라우터 쪼개기
routes 폴더 생성
rpc 코드 작성 - server.js 코드작성 - index.js 코드작성순
3교시부터 좀 이해가 안되기 시작함... 어질어질하네... 아 그리고 오류도 난다
C:\Users\82102\OneDrive\바탕 화면\거래소1\node_modules\express\lib\router\index.js:139
debug('dispatching %s %s', req.method, req.url);
^
TypeError: Cannot read property 'method' of undefined
at Function.handle (C:\Users\82102\OneDrive\바탕 화면\거래
소1\node_modules\express\lib\router\index.js:139:34)
at router (C:\Users\82102\OneDrive\바탕 화면\거래소1\node_modules\express\lib\router\index.js:47:12)
at Object.<anonymous> (C:\Users\82102\OneDrive\바탕 화면\
거래소1\server.js:26:13)
아니 라우터 쪼개기 전에는 잘만 됐는데 왜 갑자기 안되냐구.
✅✅✅ 오류 해결 ✅✅✅
server.js )
app.get('/',(req,res)=>{
res.render('index')
})
해당 코드 제거
npm install dotenv
server.js , rpc.js에 코드추가
require('dotenv').config()
.env 파일에는 기존 데몬 실행할 때 설정해둔 conf 파일과 똑같이 설정해준다
RPC_USER = ingoo
RPC_PASSWORD = 1234
RPC_PORT = 3000
얘네 찍어서 로그 확인해보기
데이터베이스 만들기
1. 예를 들어 user 라고 하는 테이블을 만들거야 -> model 안에 적어준다
model 폴더 - user.js 파일 생성
model > user.js 작성
---------------
2. sequelize-cli 이용하는 방법
npx sequelize-cli model:generate --name User2 --attributes userid:string, userpw:string,username:string
실행
> model 폴더 - User2 파일 생성되어있어야 함
끝으로 index.js 로 가서 db에다가 연결시켜주기
index.js
db.User = require('./user')(sequelize,Sequelize)
실행 시킨 이후
mysql 가서
show tables; 해서 파일 생성된것 확인하기