[node js] 성경 db 연동

mysql 성경 db를 찾아서 데이터를 넣어준 이후 작업.


bible.js

var express = require('express')
var app = express()
var router = express.Router()
var mysql = require('mysql')
var fs = require('fs')
var ejs = require('ejs')




//성경 메인 화면
router.get("/bible",function(req,res){
console.log("메인화면 진행")
//console.log(searchBibleIndex("여호수아"))

fs.readFile('bible.html', 'utf-8', function (error, data) {
res.send(ejs.render(data, {
data: [],
title: {book:"",chapter:""}
}));
});
})


//메인 화면
router.post("/bible_search",function(req,res){
console.log("바이블 찾기 포스트 진행")
var maintext = req.body.maintext

//창세기이면 01, 출애굽기

maintext = searchBibleIndex(maintext)

var jang = req.body.jang
var jeol = req.body.jeol
var jeol2 = req.body.jeol2
console.log(maintext,jang,jeol,jeol2)

var queryString = 'select book, chapter,verse,content from bible_korHRV where book = ? and chapter = ? and verse between ? and ?'
fs.readFile('bible.html', 'utf-8', function (error, data) {
getConnection().query(queryString, [maintext,jang,jeol,jeol2], function (error, result) {
if (error) {
console.log("바이블 데이터 로드 에러" + error);
return
}
//var bookName = searchBibleName(result[0].book)

res.json(result)

// res.send(ejs.render(data, {
// data: result,
// bookname:bookName,
// chapter : result[0].chapter
// }))
})
});

})


function searchBibleName(index) {

var searchIndex = index - 1

var book= [ "창세기",
"출애굽기",
"레위기",
"민수기",
"신명기",
"여호수아",
"사사기",
"룻기",
"사무엘상",
"사무엘하",
"열왕기상",
"열왕기하",
"역대상",
"역대하",
"에스라",
"느헤미야",
"에스더",
"욥기",
"시편",
"잠언",
"전도서",
"아가서",
"이사야",
"예레미야",
"예레미야애가",
"에스겔",
"다니엘",
"호세아",
"요엘",
"아모스",
"오바댜",
"요나",
"미가",
"나훔",
"하박국",
"스바냐",
"학개",
"스가랴",
"말라기",
"마태복음",
"마가복음",
"누가복음",
"요한복음",
"사도행전",
"로마서",
"고린도전서",
"고린도후서",
"갈라디아서",
"에베소서",
"빌립보서",
"골로새서",
"데살로니가전서",
"데살로니가후서",
"디모데전서",
"디모데후서",
"디도서",
"빌레몬서",
"히브리서",
"야고보서",
"베드로전서",
"베드로후서",
"요한일서",
"요한이서",
"요한삼서",
"유다서",
"요한계시록"]


return book[searchIndex]
}

function searchBibleIndex(name) {

var book= [ "창세기",
"출애굽기",
"레위기",
"민수기",
"신명기",
"여호수아",
"사사기",
"룻기",
"사무엘상",
"사무엘하",
"열왕기상",
"열왕기하",
"역대상",
"역대하",
"에스라",
"느헤미야",
"에스더",
"욥기",
"시편",
"잠언",
"전도서",
"아가서",
"이사야",
"예레미야",
"예레미야애가",
"에스겔",
"다니엘",
"호세아",
"요엘",
"아모스",
"오바댜",
"요나",
"미가",
"나훔",
"하박국",
"스바냐",
"학개",
"스가랴",
"말라기",
"마태복음",
"마가복음",
"누가복음",
"요한복음",
"사도행전",
"로마서",
"고린도전서",
"고린도후서",
"갈라디아서",
"에베소서",
"빌립보서",
"골로새서",
"데살로니가전서",
"데살로니가후서",
"디모데전서",
"디모데후서",
"디도서",
"빌레몬서",
"히브리서",
"야고보서",
"베드로전서",
"베드로후서",
"요한일서",
"요한이서",
"요한삼서",
"유다서",
"요한계시록"]
var changeBookList =[];

for(var i = 1; i < 67; i++){
var bookChange = { value :book[i-1]}
changeBookList.push(bookChange)
bookChange = {}
}

var bookIndex = changeBookList.map(function (book) { return book.value; }).indexOf(name);

console.log(bookIndex);
console.log(bookIndex+1);

if(bookIndex === -1){
return "데이터를 다시 확인해주세요"
}else{
return bookIndex+1
}
}



var pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'root',
database: 'wow',
password: '1111'
})


//디비 연결 함수
function getConnection() {
return pool
}


module.exports = router


bible.html

<!DOCTYPE html>
<html lang="en">
<head>
<title>성경 검색</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="jumbotron text-center">
<h1>성경검색</h1>
<p>찾을구절을 검색하세요</p>
</div>


<div class="container">
<h2>성경본문찾기</h2>
<p>찾으실 성경 본문을 입력해보세요</p>
<form class="form-inline" action="/bible_search" method="POST">
<div class="form-group">
<label for="maintext">성경본문</label>
<input type="text" class="form-control" id="maintext" placeholder="창세기" name="maintext">
</div>
<br><br><br>
<div class="form-group">
<input type="text" class="form-control" id="jang" placeholder="1장" name="jang">
<label for="jang"></label>
</div>
<div class="form-group">
<input type="text" class="form-control" id="jeol" placeholder="1절" name="jeol">
<label for="jeol"></label>
</div>
<br>
<br>
<h4>에서부터</h4>
<br>
<br>

<div class="form-group">
<input type="text" class="form-control" id="jeol2" placeholder="10절" name="jeol2">
<label for="jeol2"></label>
</div>
<br>
<br>
<h4>까지</h4>
<br>
<br>
<button type="submit" class="btn btn-default">찾기</button>
</form>
</div>

<br>
<br>

<div class="container">
<% var bookname = bookname %>
<% var chapter = chapter %>
<%
if(bookname && chapter){
%>
<h2><%= bookname %> 본문</h2>
<h3><%= chapter %> 장</h3>

<% }%>
<table class="table table-striped">
<thead>
<tr>
<th>구절</th>
<th>내용</th>
</tr>
</thead>
<tbody>

<% data.forEach(function (item,index){ %>
<tr>
<td>
<%= item.verse %>
</td>
<td>
<%= item.content %>
</td>
</tr>

<% })%>
</tbody>
</table>
</div>
</body>
</html>


결과화면




우분투 mysql에 외부에서 접속하기 


가비아에서 클라우드 서버를 쓰고 있는데 ip/phpmyadmin 들어가서 쿼리 작업하기가 많이 불편했다. 이참에 나의 맥북으로 원격으로 접속할 수 있게 설정을 해보았다. 사진위주로 정리해보았다.


1.나의 맥북 터미널로 ssh 서버 원격 접속!

2. etc/mysql/ 위치로 가서 vi my.cnf 열기~!

3.bind-address 부분 주석처리 #bind-address ! 이렇게!

4.sudo service mysql restart - 재시작!




5.  mysql -uroot -p 접속

6.select user, host from mysql.user  (유저와 호스트 확인)

7. % 이렇게 퍼센트로 기입된 host가 모든 host 허용이라는 뜻(나는 이미해놨음)

8.사진에 create ~~ 명령문 입력

9.명령문 다 입력후 flush privileges 를 꼭 적어준다.!!





아래는 3306 포트 열어주는 명령어 그리고 mysql 재시작





그리고 가비아 서버 매니저로 가서 방화벽정책에 mysql 3306 포트를 허용해줘야 한다. 

이것때문에 30분정도...삽질.




mysql워크벤치 확인~!




[node js] 파일전송


네비게이션



file.js

var express = require('express')
var app = express()
var router = express.Router()
var mysql = require('mysql')
var fs = require('fs')
var ejs = require('ejs')

//파일관련 모듈
var multer = require('multer')

//파일 저장위치와 파일이름 설정
var storage = multer.diskStorage({
destination: function (req, file, cb) {
//파일이 이미지 파일이면
if (file.mimetype == "image/jpeg" || file.mimetype == "image/jpg" || file.mimetype == "image/png") {
console.log("이미지 파일이네요")
cb(null, 'uploads/images')
//텍스트 파일이면
} else if (file.mimetype == "application/pdf" || file.mimetype == "application/txt" || file.mimetype == "application/octet-stream") {
console.log("텍스트 파일이네요")
cb(null, 'uploads/texts')
}
},
//파일이름 설정
filename: function (req, file, cb) {
cb(null, Date.now() + "-" + file.originalname)
}

})
//파일 업로드 모듈
var upload = multer({ storage: storage })


//파일 업로드 및 디비에 위치 저장
router.post('/upload_images', upload.single('fileupload'), function (req, res) {
console.log("post")
console.log(req.file)
console.log(req.file.path)
console.log(upload)
console.log(upload.storage.getFilename)

//파일 위치를 mysql 서버에 저장
getConnection().query('insert into myfile(name) values (?)', [req.file.path], function () {

res.redirect('/filepage');
});
});



//파일 페이지 보여주기
router.get("/filepage", function (req, res) {
console.log("파일 페이지 나와라")

//파일 가져올 위치
var path = __dirname + '/../' + 'uploads/images/'

fs.readFile('file.html', 'utf-8', function (error, data) {
var queryString = 'select * from myfile'
getConnection().query(queryString, function (error, result) {
if (error) {
console.log("파일가져올때 에러 발생" + error);
return
}
res.send(ejs.render(data, {
data: result
}));
});
})


})

//파일 다운로드 눌렀을 때 작동
router.get('/download/uploads/images/:name', function (req, res) {
var filename = req.params.name;

var file = __dirname + '/../uploads/images/' + filename
console.log(__dirname)
console.log(req.path)
console.log(file)
res.download(file); // Set disposition and send it.
});


var pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'root',
database: 'wow',
password: '1111'
})


//디비 연결 함수
function getConnection() {
return pool
}


module.exports = router


file.html

<!DOCTYPE html>
<html lang="en">
<head>
<title>파일</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
<div class="jumbotron">
<h1>파일업로드</h1>
<p> </p>
</div>
<p>.</p>
<a href="/main">게시판으로 이동</a>
</div>


<br>
<br>
<div class="container">
<form action="/upload_images" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleFormControlFile1">파일업로드</label>
<input type="file" class="form-control-file" id="fileupload" name="fileupload">
</div>
<input type="submit" value="올리기">
</form>
</div>

<br>
<br>
<br>
<h2>파일 다운로드</h2>
<ul>
<% data.forEach(function (item,index){ %>

<li><a href='/download/<%= item.name%>'><%= item.name%></a></li>

<% })%>
</ul>
</body>
</html>


결과화면


+ Recent posts

티스토리 툴바