- NOSQL 설치하기
$ docker search mongo => 설치하고자 하는 이미지 검색
$ docker pull mongo => 이미지 가져오기(도커서버)
$ docker images => 가져온 이미지 보기
- 컨테이너 생성 및 구동 (최초1 회)
$ docker run --name mg01 -d -p 37017:27017 mongo
- 클라이언트 프로그램 설치
https://nosqlbooster.com/
==== 첫번째 docker 터미널 geth 구동 =======================================
$ docker start eth03
- eth03컨테이너 내부로 진입
$ docker exec -it eth03 bash
# cd eth_node1
# geth --nousb --nodiscover --identity "eth_node1" --datadir $PWD --http --http.addr "0.0.0.0" --http.port 8545 --http.corsdomain "*" --http.vhosts '*' --networkid 1234 --http.api "admin,eth,net,web3,debug,miner,txpool,personal" --ws --ws.addr "0.0.0.0" --ws.port 8546 --allow-insecure-unlock --mine --miner.threads 1 --unlock 0 console
> miner.stop() //채굴중지
=== 두번째 docker 터미널===============================
$ docker start nd03 => nodejs 컨테이너 구동
$ docker exec -it nd03 bash => nd03 컨테이너로 진입
# cd node01
# nodemon --legacy-watch ./bin/www => bin폴더의 www를 실행시킴
크롬에서 확인 http://192.168.99.100:32302/
=======================================================
//파일명 : routes/mongo01.js
var express = require('express');
var router = express.Router();
// npm install mongodb --save --no-bin-links
var MongoClient = require('mongodb').MongoClient
console.log('mongo01 start'); //확인용
//geth에 접속하여 block 을 nosql에 추가하기
var Web3 = require('web3');
var url = "ws://192.168.99.100:38546"; //geth 연결 주소
// /eth_node1 도커에서의 0.0.0.0:30303->30303/tcp, 0.0.0.0:38545->8545/tcp, 0.0.0.0:38546->8546/tcp eth03
var ws3 = new Web3(new Web3.providers.WebsocketProvider(url));
// 새로운 블록생성될때마다 받아와서
ws3.eth.subscribe('newBlockHeaders', (err, ret) => {
if(!err){
console.log(ret);
//$ docker ps -a 응답메시지에서 확인
// d6476fa6b1cd mongo 0.0.0.0:37017->27017/tcp mg01
MongoClient.connect('mongodb://192.168.99.100:37017/db01', (err, dbconn) => {
if(!err){
var collection = dbconn.db("db01").collection("block01")
collection.insertOne(ret).then((result) => {
console.log(result)
res.redirect('/mongo/insert')
})
}
else{
console.log('err', err); //디버그 용
}
dbconn.close()
})
}
});
//192.168.99.100:32302/mongo/insert
router.get('/insert', function(req, res, next) {
res.render('mongo_insert', {title: 'NOSQL_INSERT'});
});
router.post('/insert', function(req, res, next) {
var arr = {
"userid":req.body.userid,
"userpw":req.body.userpw,
"username":req.body.username,
"userphone":req.body.userphone,
"useremail":req.body.useremail
}
//console.log(arr)
MongoClient.connect('mongodb://192.168.99.100:37017/db01', (err, dbconn) => {
if(!err){
var collection = dbconn.db("db01").collection("col01")
collection.insertOne(arr).then((result) => {
console.log(result)
res.redirect('/mongo/insert')
})
}
else{
console.log(err); //디버그 용
}
dbconn.close()
})
});
module.exports = router;
====
// 파일명 : views/mongo_insert.ejs
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<form action="/mongo/insert" method="post">
아이디 : <input type="text" name="userid" /><br />
암호 : <input type="password" name="userpw" /><br />
이름 : <input type="text" name="username" /><br />
연락처 : <input type="text" name="userphone" /><br />
이메일 : <input type="text" name="useremail" /><br />
<input type="submit" value="회원가입" />
</form>
</body>
</html>
=================app.js=========================
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var logger = require('morgan');
// npm install cors를 설치한 라이브러리 소스코드에 적용
var cors = require('cors')();
//var chatRouter = require('./routes/chat');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var memberRouter = require('./routes/member');
var dapp01Router = require('./routes/dapp01');
var dapp02Router = require('./routes/dapp02');
var mongo01Router = require('./routes/mongo01')
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
secret: '1234@',
resave: false,
saveUninitialized: true
}));
app.use(cors); //cors라이브러리 사용설정
//////////////////////////////
//index.js
//192.168.99.100:32302/
app.use('/', indexRouter);
//users.js
//192.168.99.100:32302/users/
app.use('/users', usersRouter);
//member.js
//192.168.99.100:32302/member/
app.use('/member', memberRouter);
//dapp.js
//192.168.99.100:32302/dapp/
app.use('/dapp', dapp01Router);
app.use('/mongo', mongo01Router);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
--추후 수정 again
'데이터베이스' 카테고리의 다른 글
[데이터베이스] 데이터 모델링 | 엔터티의 분류 (0) | 2023.03.05 |
---|---|
[메모] 커뮤니케이션 (0) | 2023.03.05 |
[DB] Transaction 트랜잭션 (0) | 2020.08.17 |
[데이터베이스] DML, DCL, DDL (0) | 2020.06.04 |