20220104

팡태(❁´◡`❁)·2022년 1월 4일
0

ihongss

목록 보기
9/11

CMD> nodemon --inspect ./bin/www


//조회 : await this.axios.get(url, {headers:headers});
//추가 : await this.axios.post(url, body, {headers:headers});
//수정 : await this.axios.put(url, body, {headers:headers});

//삭제 : await this.axios.delete(url, {headers:headers, data:{}});

//파일명 : ItemUpdateBatch.vue

<div>
    <el-card shadow="always">
        <h3>물품일괄수정</h3>
        <hr />
        {{items}}

        <el-button size="small" type="primary" @click="handleUpdateBatchAction">물품일괄수정</el-button>
        
        <el-table :data="items" style="width: 100%;" size="mini" >

            <el-table-column label="번호" width="120">
                <template #default="scope">
                    {{scope.$index+1}}
                </template>                     
            </el-table-column>

            <el-table-column label="물품명" width="120">
                <template #default="scope">
                    <el-input size="mini" v-model="items[scope.$index].name"></el-input>
                </template>                     
            </el-table-column>

            <el-table-column label="물품내용">
                <template #default="scope">
                    <el-input size="mini" v-model="items[scope.$index].content"></el-input>
                </template>
            </el-table-column>

            <el-table-column label="가격" width="120">
                <template #default="scope">
                    <el-input size="mini" v-model="items[scope.$index].price"></el-input>
                </template>
            </el-table-column>

            <el-table-column label="수량" width="80">
                <template #default="scope">
                    <el-input size="mini" v-model="items[scope.$index].quantity"></el-input>
                </template>
            </el-table-column>

            <el-table-column label="이미지" width="340">
                <template #default="scope">
                    <img :src="items[scope.$index].image1" style="width:50px"/>
                    <input type="file" @change="handleImage($event, scope.$index)" />
                </template>
            </el-table-column>  
        </el-table>    

    </el-card>
</div>

======================================

CMD> npm i jsonwebtoken --save

// 파일명 : app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index'); // index.js
var usersRouter = require('./routes/users'); // users.js
var boardRouter = require('./routes/board'); // 추가됨. board.js
var itemRouter = require('./routes/item'); // 추가됨. item.js
var memberRouter = require('./routes/member'); // 추가됨. member.js

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('/', indexRouter);
app.use('/users', usersRouter);
app.use('/board', boardRouter); //추가됨.
app.use('/item', itemRouter); //추가됨.
app.use('/member', memberRouter); //추가됨.

// 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;


// 파일명 : config/auth.js
module.exports = {
securityKey : 'fjifej$%e_ijfj39890uu94343',
options : {
algorithm : 'HS256', // 토큰 생성 hash알고리즘
expiresIn : '9h', // 토큰만료시간 ex) 9시간
issuer : 'corp01', // 토큰 발행자
}
}


// 파일명 : routes/member.js
var express = require('express');
var router = express.Router();

// 몽고DB연동
// CMD> npm i mongodb --save
const db = require('mongodb').MongoClient;
const DBURL = require('../config/db').mongodbURL;
const DBNAME = require('../config/db').mongodbDB;

// 로그인시에 토큰발행
// CMD> npm i jsonwebtoken --save
const jwt = require('jsonwebtoken');
const jwtKey = require('../config/auth').securityKey;
const jwtOptions = require('../config/auth').options;

// 회원가입, 로그인시 암호 hash용
const crypto = require('crypto');

// 로그인 : http://localhost:3000/member/select
// 암호정보가 있어서 post
router.post('/select', async function(req, res, next) {
try {
// 회원가입시 사용했던 암호화 방식으로 hash해야
// DB에서 로그인 비교가 가능함.
const hash = crypto.createHmac('sha256', req.body.uid)
.update(req.body.upw).digest('hex');

    const obj = {
        userid : req.body.uid,
        userpw : hash
    };

    const dbConn   = await db.connect(DBURL);
    const coll     = dbConn.db(DBNAME).collection("member");

    // const query = { $and : [{_id:obj.userid}, {userpw:obj.userpw}] };
    const query    = { _id:obj.userid, userpw:obj.userpw };
    const result   = await coll.findOne(query);

    console.log(result); 
    if(result !== null){ // DB에 일치하는 경우 
        const token = {
            token : jwt.sign( 
                { uid:result._id },     // 토큰에 포함할 내용들...
                jwtKey,                 // 토큰생성 키 
                jwtOptions              // 옵션
            ),
            refreshToken : null,        // null
        }
        return res.send({status:200, result : token});    
    }
    
    // 일치하지 않을 경우
    return res.send({status:0});
}
catch(err) {
    console.error(err);
    return res.send({status:-1, result : err});
} 

});

// 회원가입 : http://localhost:3000/member/insert
router.post('/insert', async function(req, res, next) {
try{
// hash(salt)는 abc -> io3rj987io23873987437839ufj3983r
const hash = crypto.createHmac('sha256', req.body.uid)
.update(req.body.upw).digest('hex');
const obj = {
_id : req.body.uid,
userpw : hash,
userage : Number(req.body.uage),
userbirth : req.body.ubirth,
useremail : req.body.uemail,
usercheck : req.body.ucheck,
usergender : Number(req.body.ugender)
};
console.log(obj);

    const dbConn   = await db.connect(DBURL);
    const coll     = dbConn.db(DBNAME).collection("member");

    const result = await coll.insertOne(obj); //{ }
    console.log(result);
    if( result.insertedId === obj._id ) {
        return res.send({status:200});
    }
    return res.send({status:0});
}
catch(err) {
    console.error(err);
    return res.send({status:-1, result : err});
} 

});

// 아이디중복확인 : http://localhost:3000/member/idcheck?uid=aa
router.get('/idcheck', async function(req, res, next) {
try {
const userid = req.query.uid;

    const dbConn   = await db.connect(DBURL);
    const coll     = dbConn.db(DBNAME).collection("member");

    const query    = { _id : userid };
    const result   = await coll.countDocuments(query);

    return res.send({status:200, result:result});
}
catch(err) {
    console.error(err);
    return res.send({status:-1, result : err});
} 

});

module.exports = router;


0개의 댓글