Nodejs

 

 

1 . Node.Js 설치후  Db 연동

http://macaronics.net/index.php/m03/nodejs/view/1800

 

 

2.  axios  및  uuid-apikey ( 키생성 )설치


$npm i axios --save
$npm install uuid-apikey --save

 

https://www.npmjs.com/package/uuid-apikey

 

 

 

3. 테이블 생성 및 더미 데이터 생성

CREATE TABLE `t_member` (
  `t_member` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `email` varchar(50) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `apiKey` varchar(50),
  `uuid` varchar(50),
  PRIMARY KEY (`t_member`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;




 

 

4.  uuidAPIKey.create(); 

실행후 데이터베이스에  t_member  테이블에 저장
 

console.log(uuidAPIKey.create());
// {
//     apiKey: '67QFMJP-6BS471D-JEB7X6E-FG33XJT',
//         uuid: '31eefa4a-32f2-4385-9396-7e997c063ecb'
// }

 

INSERT INTO t_member (name, email, phone, apiKey, uuid) VALUES('홍길동', 'test@gmail.com', '010-1111-2222', '67QFMJP-6BS471D-JEB7X6E-FG33XJT', '31eefa4a-32f2-4385-9396-7e997c063ecb');

 

 

 

5. app.js  추가

var apiRouter = require('./routes/api');

app.use('/api', apiRouter);

 

 

 

6. routes 디렉토리 api.js  파일 생성 

다음과 같이 

 

var express = require('express');
var router = express.Router();
var axios = require('axios');
const uuidAPIKey = require('uuid-apikey');


var mysql = require('mysql');
var connection = mysql.createPool({
    connectionLimit: 10,
    host: '192.168.174.1',
    port: '3308',
    user: 'dev',
    password: '1111',
    database: 'dev'
});





/* GET home page. */
router.get('/users/:email/:apiKey/:type', function (req, res, next) {
    const { email, apiKey, type } = req.params;
    let dbApiKey = null;
    let getDbUuid = null;


    //req.session.authId
    //세션값 또는 파라미터에서 가져온 email 값을 통해  데이터베이스 저장된 키값 및 아이디값 가져오기
    const getMemberData = (callbackfunc) => {

        //where email = 'test@gmail.com'
        console.log("이메일 : " + email);

        let dbParam = [];
        dbParam.push(email);

        connection.query("select apiKey , uuid from t_member where email =? ", dbParam, function (error, results, fields) {
            if (error) throw error;

            if (results[0] == null) {
                res.send("Email is wrong ");
                return;
            }

            //등록된 이메일 경우 api 아이디 및 키값 저장
            dbApiKey = results[0].apiKey
            getDbUuid = results[0].uuid;

            //콜백함수
            callbackfunc(results);
        });


    }

    getMemberData(function (data) {

        //uuidAPIKey.isAPIKey  : 전달된 API 키 문자열이 유효한 API 키인지 테스트합니다.
        //uuidAPIKey.check :API 키와 UUID가 동일한지 테스트합니다. API 키 또는 UUID가 유효하지 않은 경우 TypeError를 발생시킵니다.
        // DB 에서 가져온 api 아이디 값을  uuid-apikey 제공해 주는 uuidAPIKey 함수를 통해  비교 
        if (!uuidAPIKey.isAPIKey(apiKey) || !uuidAPIKey.check(apiKey, getDbUuid)) {
            res.send("The value provide " + apiKey + " is not a valid apiKey :");
            return;
        }


        //DB 에서 자료를 가져오는 것이 정상이나, 여기서는 테스트상 더미데이터 자료를 제공해 주는 jsonplaceholder 사이트를 이용
        axios.get('https://jsonplaceholder.typicode.com/todos/' + type)
            .then((response) => {
                res.send(response.data);
            })
            .catch(function (error) {
                console.log(error);
                res.send("type error");
            });



    });


});


module.exports = router;

 

 

 

참조 :

 

 


 

 

about author

PHRASE

Level 60  라이트

민주주의에 대한 나의 개념은, 그 체제하에서는 가장 약한 자가 가장 강한 자와 똑같은 기회를 가질 수 있다는 것이다. -간디

댓글 ( 5)

댓글 남기기

작성

Nodejs 목록    more