Node.js, MongoDB 연결
mongoose
- mongoose 라이브러리 이용 (npm imstall mongoose)
- mongoDB에는 스키마가 없기 때문에 mongoose를 사용해서 스키마를 생성
- 스키마(Schema) = 해당 컬렉션의 문서에 어떤 종류의 값이 들어가는지를 정의
- 모델(model) = 스키마를 통해서 만드는 인스턴스
- mongoose 7번대 버전부터는 콜백 함수 미지원
mongoose 함수
- connect(주소) = 해당 주소의 MongoDB 연결
- disconnect(), connection.close() = mongoose 연결 해제
- Schema() = 필드 타입 정보를 JSON 형태로 정의
※ const Schema = mongoose.Schema; 와 같이 변수로 선언한 후 사용
- model(문자열(단수 표현), 스키마) = 지정한 스키마를 참조하여 모델 생성
var mongoose = require("mongoose");
const Schema = mongoose.Schema;
// 스키마 정의
var checkres = new Schema({
address: { type: String, required: true },
blockNumber: { type: Number, required: true },
returnValue: { type: Schema.Types.Mixed, required: true },
createtime: { type: Date, required: true, default: new Date() },
});
// 모델 생성
var checkModel = mongoose.model("checklist", checkres);
mongoose.connect("MongDB 주소"); // MongoDB 연결
var CheckRes = new checkModel();
CheckRes.address = address;
CheckRes.blockNumber = blockNumber;
CheckRes.returnValue = returnValue;
result = CheckRes.save(); // CheckRes 객체를 MongoDB에 저장
mongoose.connection.close(); // MongoDB 종료
- findOne(), find() = 데이터 조회
- create(조건) = 데이터 추가
- save() = MongoDB에 저장
- update(수정할 값, 수정한 값) = 데이터 수정
- remove(조건) = 해당 조건 만족 시 삭제
스키마(Schema) 타입
- String = 문자열
- Number = 정수
- Schema.Types.ObjectId = id (정의를 안해도 자동적으로 몽고에서는 생성하며 행을 구분하는 id 값으로 사용)
- Buffer = 바이너리 타입
- Boolea = 참/거짓
- Schema.Types.Mixed: 다양한 타입 저장 가능
- Array = 배열 ([] 이용)
- Date = 날짜
※ new Date()로 현재 시간 자동 생성 시 한국 시간으로 변환하는 방법
function getCurrentDate() {
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var today = date.getDate();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var milliseconds = date.getMilliseconds();
return new Date(
Date.UTC(year, month, today, hours, minutes, seconds, milliseconds)
);
}
스키마(Schema) 속성
- required = 입력 필수
- unique = 중복값 비허용
- trim = 공백 제거
- default = document 생성 시 기본값 설정
- lowercase = 알파벳 소문자로 출력
Klaytn 토큰 생성
const CaverExtKAS = require("caver-js-ext-kas");
require("dotenv").config();
const caver = new CaverExtKAS();
const accessKeyId = process.env.AccessKeyID;
const secretAccessKey = process.env.SecretAccessKey;
const chainId = 1001;
// KAS API 초기화
caver.initKASAPI(chainId, accessKeyId, secretAccessKey);
const keyringContainer = new caver.keyringContainer();
// private key를 이용해 keyring 생성
const keyring = keyringContainer.keyring.createFromPrivateKey(
process.env.PrimaryKey
);
keyringContainer.add(keyring);
// Token 생성 함수 => klaytnscope에서 확인 가능
async function createToken() {
const kip7 = await caver.kct.kip7.deploy(
{
name: "CYBER", // 토큰명
symbol: "CY", // 토큰 심볼
decimals: 0, // 소숫점 자리수
initialSupply: "100000000000", // 초기 발행량
},
keyring.address,
keyringContainer
);
console.log(kip7);
}
createToken();
// Token 전송 함수
async function transferToken(address, amount) {
const cyberToken = await new caver.kct.kip7(
"토큰 컨트랙트 주소"
);
await cyberToken.setWallet(keyringContainer);
const receipt = await cyberToken.transfer(address, amount, {
from: keyring.address,
});
console.log(receipt);
}
transferToken("토큰을 받을 지갑 주소", 토큰수);
// 지갑에서 Token 조회
async function getBalance(address) {
const cyberToken = await new caver.kct.kip7(
"토큰 컨트랙트 주소"
);
const balance = await cyberToken.balanceOf(address);
console.log(balance);
}
getBalance("조회할 지갑 주소");
// 지갑 생성
async function createWallet() {
const wallet = await caver.kas.wallet.createAccount();
console.log(wallet);
}
createWallet();'블록체인 기술사업 교육 > Node.js' 카테고리의 다른 글
| 블록체인 기술사업 교육 29일차 (0) | 2023.05.15 |
|---|---|
| 블록체인 기술사업 교육 27&28일차 (0) | 2023.05.11 |
| 블록체인 기술사업 교육 25&26일차 (0) | 2023.05.09 |
| 블록체인 기술사업 교육 15일차 (0) | 2023.04.21 |
| 블록체인 기술사업 교육 14일차 (0) | 2023.04.20 |
댓글