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;
참조 :
댓글 ( 5)
댓글 남기기