신입적에 손댔던 db는 sql 쿼리를 하나하나 짜서 날렸는데요
node에서 js문법으로 express 프레임워크에 내장된
get/post/put/delete에 파라미터를 태워보내면
알아서 select, insert, update, delete를 수행해줍니다.
참고로 이 본문에서 vue 프로젝트 생성이라던가,
express, db설치, postman을 이용한 api테스트는 생략하고
딱 구현만 정리 하도록 하겠습니다.. 왜냐면 내 메모 용도이므로.. -ㅅ-;
1. 폴더구조
기본 패키지 세팅에서 추가될 파일들은
서버를 실행시키기 위한 src/server.js
db에 접속하기 위한 src/config.js
스키마 모델 정의를 위한 src/models/user.js
실제 api구현을 위한 src/routes/index.js 이렇게 4개만 만들어 건드릴거고요
가능하면 에러처리같이 현재 소스코드 이해에 방해되는것들은 모두 제거했습니다.
src/server.js
const express = require('express');
const app = express();
const port = process.env.PORT || 4000;
const db = require('./config.js');//db정보
const User = require("./models/user");//user모델 사용
const router = require('./routes')(app, User) //app,User 변수를 router로 내보냄
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static('src'));//src 접근허용
app.listen(port, () => console.log(port + '번 포트'));
서버를 세팅해주는데 현재는 파일이 없으므로
에러가 난다면 const db, User, router를 잠시 주석처리 시키세요.
당연히 이 소스에 앞서서 express를 설치는 해 주어야 express가 동작 하겠죠?;;
그다음에 터미널에서 프로젝트 폴더로 이동하셔서 server.js를 실행시킵니다.
node src/server.js
콘솔로그에 ~번 포트라고 나오겠죠?
사실 이렇게 실행하면 소스코드 고치고나서 서버를 계속 껐다가 다시 켜줘야하는데요
귀찮으시면 nodemon이라는걸 install해서 nodemon src/server.js 로 실행시키면 됩니다.
필요하다면 노드몬 검색 ㄲ
src/config.js
const mongoose = require("mongoose");
const database = mongoose.connection;
database.on('error', console.error);
database.once('open', function(){
console.log("connected db server");
});
mongoose.connect('mongodb://username:password@localhost:27017', { dbName: 'dbname'}, function(err){
if(err) {
console.log(err + '에러');
}
});
디비를 연결하는 config파일
디비마다 다를 수 있으므로 따로 찾아봐야 함
mongoDB는 27017 포트가 기본.
특정 node버전에서 mongo가 버전에러를 계속 토했는데
저는 mvn을 설치해서 node버전을 변경했더니 잘 동작합니다.
src/model/user.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var UserSchema = new mongoose.Schema({
user_id: String,
pw: String
});
// 모델 생성
const User = mongoose.model("User", UserSchema);
module.exports = User;
디비 구조에 맞추어서 스키마 모델을 만들두고
User라는 이름으로 다른곳에서 불러 쓸 수 있도록 export
src/routes/index.js
module.exports = function(app, User) { //server.js 변수사용
app.get('/', (req, res) => {
res.send('hello node');
})
//GET ALL USER
app.get('/api/users', function(req,res){
User.find(function(err, users){
res.json(users);
})
});
//GET USERID
app.get('/api/users/:userid', function(req, res){
//필드명:요청된 파라메터
User.findOne({user_id: req.params.userid}, function(err, result){
// if(!pw) return res.status(404).json({error: 'pw not found'});
res.json(result);
})
});
//INSERT
app.post('/api/users', (req, res) => {
//User모델, 새 행에 추가할 값
const userData = new User({
user_id: "user15",
pw: "user17"
});
console.log(req, res);
userData.save();
})
//UPDATE THE USER
app.put('/api/users/:userid', function(req, res){
//user_id필드가 userid파라메터와 일치하는것 1개 조회
User.findOne({user_id: req.params.userid}, (err, result) =>{
//반환된 result배열의 user_id값을 변경
result.user_id = "test_update";
result.save()//저장
res.json(result);//결과 배열
})
});
//DELETE USER
app.delete('/api/users/:userid', function(req, res){
console.log(req.params.userid + "가 삭제됨");
});
}
요것이 오늘의 핵심 소스 코드. 사실 다른 세팅 다 되있으면 이것만 보면 됩니다.
크게 자바스크립트 배열 관련 내장함수인 find를 이용한 단순 조회 get과
find조회후 save함수를 쓰는 post, put
파라메터(:userid)만 넣어서 삭제하는 delete로 나누어집니다.
테스트는 postman을 다운받아서 사용하거나
크롬 확장프로그램중 insomnia라는 프로그램이 있다고 하니
http://localhost:4000(server.js에서 설정한 포트번호)/api/users 또는
http://localhost:4000(server.js에서 설정한 포트번호)/api/users/user22 처럼 파라메터를 넣어서
결과를 확인해볼수 있습니다.
'개발관련' 카테고리의 다른 글
mongodb admin/db별 계정설정 (0) | 2022.05.13 |
---|---|
Bootstrap5에서 datetimepicker를 사용하자!!!!악!!! (0) | 2022.04.20 |
C언어 이진탐색 알고리즘 (0) | 2021.06.17 |
mac vim image not found 에러 (0) | 2021.06.16 |
Javascript ES6 적용하는법 + 크로스 브라우징 대처 (0) | 2021.05.24 |
댓글