반응형

 

 

 

'npm'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

처음 이런 문구를 맞닥뜨리면 당황스러울 수 있는 표현인데
한번 처리를 하고나면 편-안 해지는 문장이다

대충 npm을 맞게 설치 했다면, npm이 설치된 폴더가 아닌 다른 위치에서도 사용할 수 있도록해주는 걸
환경 변수 설정이라고 하는데

이러한 환경변수 설정을 따로 해주어야
cmd에서 node나 npm 명령어를 아무데서나 호출하여 사용할 수 있다

 

 

 

환경변수 설정하는법은 아래 스샷 참고

 

window 키 누른 다음, 환경 변수 검색

시스템 환경 변수 편집 ㄱㄱ

 

 

고급 탭 아래의 환경 변수 클릭

 

 

 

 

아래쪽의 시스템 변수에서 변수명이 Path인 곳을 찾아 더블클릭 또는 편집 ㄱㄱ

 

 

우측 상단의 새로만들기 또는 빈칸을 더블클릭하여 아래의 폴더 위치를 복붙하자

 

 

윈도우 기준 노드 설치 위치

C:/Program%20Files/nodejs/

 

 

확인 - 확인을 눌러 세팅을 완료하면

node 설치 폴더가 아닌 다른 모든 위치에서 node 사용이 가능해진다

 

 

 

 

참고 : 

https://stackoverflow.com/questions/27864040/fixing-npm-path-in-windows-8-and-10

 

Fixing npm path in Windows 8 and 10

Have done a lot of googling, tried reinstalling node.js using the official installer, but my npm pathing still doesn't work. This doesn't work npm install foo I get an error message saying missing

stackoverflow.com

 

반응형
반응형

 

 

 

[javascript] 카카오맵 지도 API 사용하는법 (1.키 발급)

카카오맵 API를 사용해서 웹이나 어플리케이션에 지도 서비스를 이용할 때 첫단계 과정을 기록해봄 카카오맵 API를 사용할 도메인 등을 추가해주어 지도 API에서 접근이 가능한 키 발급을 받으면

studyingpingu.tistory.com

 

 

기존에 작성해본 카카오맵 API 지도 사용법 다음과정 작성해봄

작성해야지 해야지하다가 거의 한 분기가 지나고 다음 글을 쓰는내가 레전드

 

 

일단 API 키를 발급 후 도메인 등록까지 마쳤으면 지도를 띄우는 과정 중 절반은 해낸거나 마찬가지임

그게 없으면 아예 지도를 띄울수없응게

 

다음과정은

html에 발급받은 API key를 넣고 카카오맵 api를 호출하는 자바스크립트를 호출해준다

html div에 지도 map을 추가해준 다음, 자바스크립트 코드에 map 객체를 생성해주면 끝

 

 

*API 키는 카카오에 등록한 사용자가 맞다는 일종의 인증 방법

 

 

 

대충 글로 적어본 과정은 위와같으며 아래는 코드에 적용한 방법

 

 

 

html

<!DOCTYPE html>
<html lang="en">
<head>

    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

    <title>페이지 타이틀。</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>

<body>

    <div id="map" style="width:700px;height:500px;"></div>

    <script src="js/jquery.js"></script>
    <script type="text/javascript" src="js/jquery.ajax-cross-origin.min.js"></script>

    <!-- 기본 지도 app key -->
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=APP API KEY=발급받은 키 입력&libraries=services"></script>

    <!-- 기본 지도 기능에서 클러스터 추가 사용 -->
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=APP API KEY&libraries=services,clusterer,drawing"></script>

    <script type="text/javascript" src="index.js"></script>

</body>

</html>

위처럼 html 파일을 작성하면 width 너비가 700, height 높이가 500인 지도를 웹페이지에 표출할수있다

(아래 자바스크립트 코드도 작성해야됨)

 

지도를 사용자 디바이스 너비에맞게 css를 조절하는게 좀 까다로웠는데

일단 지도 띄우는것만 시도해보는 것이므로 그냥 고정값을 줘봤다

+아래에 변형해본 css를 추가해보았으니 참고해서 응용해보자

 

 

기본 지도 app key 부분은 카카오맵 지도 api에서 제공하는 기본적인 기능을 사용할 때 호출하는 방식이고

 

아래의 기본지도 기능에서 클러스터를 추가했다는 부분은 지도 api에서 제공하는 기능들 중 

좀더 심화된 기능을 사용할 때 사용한다

 

따라서 기본적인 지도의 경도 위도, 주소등의 정보만 이용할 때는 서비스만 사용해도 되고,

지도 데이터를 시각화하거나 지도 위에 뭔가 그려내고자 할 때는 아래의 ,clusterer,drawing 를 추가해주면 된다

 

javascript

//지도 생성에 사용
var map;
var mapContainer;

window.onload = function() { 	
	mapContainer = document.getElementById('map'), // 지도를 표시할 div 
	mapOption = {
		center: new kakao.maps.LatLng(37.566826, 126.9786567), // 지도의 중심좌표
		level: 3 // 지도의 확대 레벨
	};  

	// 지도를 생성합니다    
	map = new kakao.maps.Map(mapContainer, mapOption); 
}

페이지가 로드될 때 지도 객체를 새로 생성하게 함

 

페이지가 로드되고, 생성된 지도에 클릭 이벤트, 지도 위 마커 생성 등 지도의 기능을 계속 사용하기 위해

전역으로 map, mapcontainer를 선언하여 사용했다

 

mapOption 객체

center는 경도 위도 좌표를 주고 지도를 생성할 때 디폴트로 열리는 위치를 선언함

level 지도의 확대, 축소된 정도 (1~14까지 가능, 1이 최대 확대된 정도)

 

 

 

지도 클러스터 기능 예시

 

이런식으로 지도에 묶어서 보여줄수있는게 클러스터(집단) 기능

 

 

 

아래는 내가 임의로 css를 이것저것 추가해보고 지도 사이즈를 내가 사용하기 적합하게 바꾼 내용

 

/* 지도 */
.map_wrap {
position:absolute; overflow:hidden; width:100%;
height:1024px;
}

사실 높이부분이 아직도 마음에 안드는데 이건 내가 위아래에 다른 요소를 추가한다고 찌그러진거라

일단 너비는 위와같이 참고하면 디바이스 너비에맞게 100%를 유지한다

 

이 css를 적용하려면 html map에 style 대신 class="map_wrap"를 적용해주면 됨

 

그럼 지도 요소가 화면 너비에 맞게 유지된다

 

 

참고 :

 

https://apis.map.kakao.com/web/guide/

 

반응형
반응형

 

 

 

카카오맵 API를 사용해서 웹이나 어플리케이션에 지도 서비스를 이용할 때 첫단계 과정을 기록해봄

 

 

 

 

카카오맵 API를 사용할 도메인 등을 추가해주어 지도 API에서 접근이 가능한 키 발급을 받으면 된다

 

그럼 안드로이드나 iOS, 웹에서 카카오맵을 사용할수있다

 

 

여기서 등록하면 된다

https://developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

내 애플리케이션을 클릭한다

 

 

 

그럼 기존 등록이 된 경우, 등록된 리스트가 보이며

신규 유저의 경우 리스트에 아무런 앱이 없이 그냥 애플리케이션 추가만 보일듯

 

어쨌든 등록이 필요하니 애플리케이션 추가 ㄱㄱ

 

 

 

이미지 등록은 필수가 아닌것같지만

나는 기존 만들어둔 이미지가 있어서 그걸로 사용했음

 

 

저장을 하면, 요약정보탭으로 바로 이동하게 되는데

이때 네이티브 앱 키, REST API 키, JavaScript 키, Admin 키가 자동으로 부여된다

 

 

웹에서 지도를 사용할경우 자바스크립트 키 가 필요하니 어디서 얻어야하는지 잘 알아두자

 

 

왼쪽의 메뉴에서 플랫폼으로 이동하여 개발환경에 맞는 환경을 세팅해준다

 

 

나는 웹사이트에서 카카오지도를 사용할 것이므로 Web 플랫폼 등록을 하였다

안드로이드, iOS 어플에 지도를 적용하려면 각각 Android, iOS 플랫폼 등록으로 진행하면 되겠다

 

 

 

 

그러면 이렇게 사이트 도메인 입력창이 뜬다

 

도메인이 없는 경우, ip 주소만 입력해도 되고

도메인을 구입한 경우 도메인 주소를 입력하면 된다

 

i.e.) 네이버의 경우, www.naver.com을 입력해주면 된다

 

+만약 localhost에서 테스트를 진행할 경우, localhost에 대한 등록이 따로 필요하다

 

처음에 서버에 업로드 안하고 그냥 로컬에서 테스트를 해봤는데 지도가 뜨지않아서 당황했지만

localhost에 대한 추가를 해주었더니 오류가 해결되었다

 

주의하자

 

 

 

도메인 등록을 마치면

 

 

성공적으로 마쳤다는 기쁜 팝업창이 뜬다

 

 

반응형
반응형

 

 

목적 : 지도 API를 이용해서 정보를 보여주고, 또 주소 url에 넘겨주기 위해 사용

 

 

먼저, 보여줄 문자열에서 앞의 몇개의 문자를 잘라 필요한 만큼만 출력하는 방법

= substr을 사용한다

 

substr 사용예시

const str = '주소 : 서울특별시 강남구 삼성동 영동대로 513';

var sl = str.length;

console.log(str.substr(5,sl-5));
// expected output: "서울특별시 강남구 삼성동 영동대로 513"

//str.substr(A,B);
//A: str 문자열 중에서 자를 위치 (배열처럼 0부터 시작)
//B: A에서부터 몇개의 문자를 자를것인지 개수 입력

 

const str = 'Mozilla';

console.log(str.substring(1, 3));
// expected output: "oz"

console.log(str.substring(2));
// expected output: "zilla"

한글은 2칸인줄 알았는데 한글 공백 특수문자 모두 다 같은듯

 

 

 

 

encodeURI 사용하는 이유

= URI를 전달 할 때 문제가 없도록 인코딩 하는 용도

 

보통, 웹을 통해서 데이터를 전송할 때 특정 문자들은 특수한 기능으로 사용한다

 

예를들어, http://a.com?name=egoing&job=programmer 에서
&job=programmer 중 '&'하나의 파라미터가 끝나고 다음 파라미터가 온다는 의미이다.


그런데 다음과 같이 job의 값에 &문자가 포함된다면 시스템은 job의 값을 제대로 인식할수 없게 된다.
http://a.com?name=egoing&job=programmer&blogger


이런 문제를 회피하기 위해서 다음과 같이 치환해준다.
http://a.com?name=egoing&job=programmer%26blogger
그럼 시스템에서는 %26&로 해석하여 원래의 의도대로 값을 해석할 수 있게 된다.
이러한 처리를 이스케이핑(escaping)라고 부른다.

 

 

 

encodeURI 사용예시

 

활용 예시

//주소 url인코딩 네이버 지도 API 응용본

const uri = 'nmap://place?lat='+lat_+'&lng='+long_+'&name='+Addr+'&appname=www.naver.com';
const encoded = encodeURI(uri);

//인코딩 값 테스트용 출력
console.log('주소 url 인코딩 : ' +encoded);

기존에 사용하는 lat_, long_, Addr 변수들을 사용하여 변수 uri에 넣은 다음

encodeURI을 사용하여 인코딩을 해주면 사용할수있다

 

 

 

 

 

참고 : 

 

문자열 자르기

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/substr

 

String.prototype.substr() - JavaScript | MDN

substr() 메서드는 문자열에서 특정 위치에서 시작하여 특정 문자 수 만큼의 문자들을 반환합니다.

developer.mozilla.org

 

 

문자열 url 인코딩

https://opentutorials.org/course/50/189

 

encodeURI - 생활코딩

요약(Summary) URI를 전달 할 때 문제가 없도록 인코딩 문법(Syntax) encodeURI(encodedURI) 인자(Parameters) 인자명 데이터형 필수/옵션 설명 encodedURI string 필수 인코딩할 문자열 반환값(Return) string, 인코딩된

opentutorials.org

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURI

 

encodeURI() - JavaScript | MDN

encodeURI() 함수는 URI의 특정한 문자를 UTF-8로 인코딩해 하나, 둘, 셋, 혹은 네 개의 연속된 이스케이프 문자로 나타냅니다.

developer.mozilla.org

 

반응형
반응형

 

 

 

 

서버에 이미지를 업로드 할 일이 생겨서 사용해본 Node.js 미들웨어 multer.js

multer는 1개의 이미지 업로드도 가능하고, 2개 이상 업로드도 가능하다

 

 

주로 multer는 aws s3와 연계해서 사용을 하는것 같은데

나는 그냥 사용중이었던 ec2에 업로드했다

 

 

목적 : 서버에 이미지 업로드

 

 

 

npm을 이용한 설치법

npm install multer

 

 

하나의 이미지 업로드 하는법

 

 

일단 이미지 업로드를 위한 자바스크립트 파일을 새롭게 만들고

서버에서 사용해줄 것임

 

imgUpload.js

//이미지 업로드 파일
//imgUpload.js


const multer = require('multer')

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
		cb(null, './uploadImg')
		//이미지 업로드시킬 폴더 위치
    },
    filename: function (req, file, cb) {		
		cb(null, file.originalname)
        //서버에 저장할 파일 명
    }
})
var upload = multer({ storage: storage })
//storage는 업로드 될 폴더 위치

module.exports = {
	upload	
};

 

 

 

서버에서 post 요청 저리하는 부분

main.js

//server.js

var express = require('express')

//이미지 업로드
var img = require('./imgUpload.js')


//파일 1개를 업로드 하는 경우
app.post('/upload', img.upload.single('file'), function (req, res, next) {  
  console.log('이미지 업로드 ㅇㅋ');  
})

 

 

클라이언트에서 post 요청으로 이미지 서버로 넘기기

index.js

//서버에 이미지 업로드 post 요청
//index.js

function imgUpload(){
	console.log('이미지 업로드 한 경우');

	let formdata = new FormData();
	var file = document.getElementById('imgUpload').files[0];
	
	formdata.append('file', file);	
	 
	fetch("/upload",{
		method : "POST",
		body: formdata
	})	
}

formdata를 이용해서 선택한 이미지 파일을 서버로 전달했다

 

 

index.html

<!--html 이미지 업로드 1개-->
<!-- index.html -->

<div class="col-md-12 col-sm-12">
	<input type="file" id="imgUpload" style = "display:none;" accept="image/png, image/jpeg"></input>
	<label id="imgLabel" for="imgUpload">장소 이미지 추가하기</label>
</div>

 

input 태그에 accept="image/png, image/jpeg" 부분을 추가해주어

png, jpeg 파일 형식만 업로드 시킬수있도록 추가해보았다

 

 

 

위의 방식은 하나의 이미지만 업로드해도 충분해서 커스터마이징을 해본 방법이고

 

아래의 2개 이상의 이미지 업로드 부분은

정리된 부분을 그대로 참고해본 방법으로

 

혹시 사용 중 문제가 생긴다면 댓글로 알려주세요

 

 

 

이미지 파일 2개 이상 업로드 하는 법

 

index.html

<!DOCTYPE html>

<head>
    <title>Profile form</title>
</head>

<body>
   
    <form method="POST" action="/profile-upload-multiple" enctype="multipart/form-data">
        <div>
            <label>Upload multiple profile picture</label>
            <input type="file" name="profile-files" required multiple  />
        </div>
        <div>
            <input type="submit" value="Upload" />
        </div>
    </form>
    
</body>

</html>

 

 

index.js

var express = require('express')
var multer  = require('multer')

var app = express()


var storage = multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, './uploads')
    },
    filename: function (req, file, cb) {
      cb(null, file.originalname)
    }
})

var upload = multer({ storage: storage })

app.use('/uploads', express.static('uploads'));

app.post('/profile-upload-multiple', upload.array('profile-files', 12), function (req, res, next) {
    // req.files is array of `profile-files` files
    // req.body will contain the text fields, if there were any
    var response = '<a href="/">Home</a><br>'
    response += "Files uploaded successfully.<br>"
    for(var i=0;i<req.files.length;i++){
        response += `<img src="${req.files[i].path}" /><br>`
    }
    
    return res.send(response)
})

 

 

 

참고 :

 

How to Upload Image Using Multer in Node.js?

Whenever you make a website like social media app or blog app , you will most probably have feature where you will allow user to upload…

medium.com

 

 

반응형
반응형

카카오맵 API를 연동해서 웹서비스를 개발하다 보면

f12 개발자도구 콘솔창에서 맞닥뜨리게되는 워닝이 있는데

 

그냥 궁금해서 찾아본 파서 블로킹 경고창에 대한 위험도를 기록해봄

 

 

 

sdk.js?appkey=AppKey&libraries=services:4 A parser-blocking,
cross site (i.e. different eTLD+1) script,
http://t1.daumcdn.net/mapjsapi/js/main/4.4.1/kakao.js, is invoked via document.write.
The network request for this script MAY be blocked by the browser in this or
a future page load due to poor network connectivity.
If blocked in this page load, it will be confirmed in a subsequent console message.
See https://www.chromestatus.com/feature/5718547946799104 for more details.

(가독성을 위해 줄바꿈으로 출력함)

 

 

 

 

 

 

카카오 답변

- 지도가 로드되지 않는게 아니라면, 무시해도 됨

- document.write로 스크립트를 생성하는것은 피하는게 좋다

 

 

 

참고 :

 

 

 

https://devtalk.kakao.com/t/gatsby-map/103810/2

 

Kakao DevTalk

카카오 데브톡. 카카오 플랫폼 서비스 관련 질문 및 답변을 올리는 개발자 커뮤니티 사이트입니다.

devtalk.kakao.com

 

 

https://devtalk.kakao.com/t/parser-blocking/115430

 

Kakao DevTalk

카카오 데브톡. 카카오 플랫폼 서비스 관련 질문 및 답변을 올리는 개발자 커뮤니티 사이트입니다.

devtalk.kakao.com

 

 

document.write로 스크립트 렌더링 시 발생하는 문제 관련

https://www.cosmosfarm.com/threads/document/21729

 

parser-blocking via document.writhe 관련 문제 해결 방법 - Cosmosfarm

안녕하세요. 워드프레스에서 코스모스 회원관리 플러그인을 사용합니다. 인 앱 브라우저를 통하여 홈페이지로 접속하여 결제 창에서 주문을 할 때 주소 창이 뜨질 않습니다. console 에는 이런 문

www.cosmosfarm.com

 

반응형
반응형

Uncaught DOMException: Failed to read the 'sessionStorage' property from 'Window': Access is denied for this document.

 

현재 크롬 쿠키 설정이 쿠키차단이라 그런지

도메인으로 접속하면 localstorage 기능이 차단되어 에러가 발생하는 문제가 생겼다

 

 

모바일 사파리에서는 자동으로 쿠키를 허용해줘서 그런지 이러한 문제가 발생하지않았고,

데스크탑 크롬으로 접속 시, 도메인이 아닌 아이피로 접속한 경우에도 문제는 없었다

 

 

이런 경우, 코드에서의 수정이 아니라

쿠키차단이 되어있어서 자바스크립트에서 사용한 스토리지 API기능을 블락 당한것이므로

크롬 설정에서 바꾸어주고 테스트를 진행하면 된다

 

 

 

크롬 설정 > 개인정보 및 보안 > 쿠키 및 기타 사이트 데이터 > 모든쿠키허용 하면 해결됨

 

 

 

 

 

 

 

 

 

참고 : 

https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document

 

Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document. - The Chro

Home of the Chromium Open Source Project

www.chromium.org

 

반응형
반응형

웹에서 가볍게 사용해보려고 이용한 MongoDB

nosql의 대표주자이며 json을 데이터베이스로 취급할수있어서 사용해보았다

 

맨땅에 헤딩하듯 기초 명령어를 찾아가며 적용해본거라

굉장히 단순하게 이용해봄

 

 

Express 모듈을 사용하여 Node.js와 MongoDB를 연동하는 법과

DB에 컬렉션 추가하는법, 저장된 DB를 조회하는법과 컬렉션을 제거하는법을 기록해본다

 

 

 

※ mongoDB 버전 확인하는법

 

커맨드 창에 아래의 명령어 입력

 

mongod --version

 

아래 예시는 몽고디비 v5.0.2를 기준으로 작성되었다

버전별로 명령어가 조금 다를수있어서 본인의 버전을 숙지하는게 좋다

 

 

 

Node.js MongoDB 연결

var fs = require('fs');
var express = require('express')
var app = express()

//인덱스 페이지
app.get('/', function(request, response) { 	
	fs.readFile('index.html', function (error, data) {
		response.writeHead(200, { 'Content-Type': 'text/html' });
		response.end(data);
		console.log('메인페이지');
    });	
});

//===== 데이터베이스 연결 =====//

var MongoClient = require('mongodb').MongoClient;

//데이터베이스 객체를 위한 변수 선언
var database;

//데이터베이스에 연결
function connectDB() {
	
	var databaseUrl = 'mongodb://localhost:27017/DB';
	
	MongoClient.connect(databaseUrl, function(err, db) {
		if (err) throw err;
		
		console.log('데이터베이스에 연결되었습니다. : ' + databaseUrl);
		
		// database 변수에 할당
		database = db;
		
		//database.collection is not a function 오류나서 추가해봄
		database = db.db('DB');

	});
}


app.listen(80, function() {
  console.log('Example app listening on port 80!')
  connectDB();
});

 

처음 디비 연동할 때, connectDB함수에서 database.collection is not a function이라는 오류를 맞닥뜨려서

추가한 내용 :  database = db.db('DB');

 

몽고디비 버전마다 디비 연결 시 방법 차이가 있는것같은데 일단 나는 저방식으로 해결이 됐다

다른 방식은 나에게 적용되지않았음

 

여기까지가 서버실행 시, 몽고디비 연동하는 법

 

 

아래에는 연동후 데이터를 저장하고 조회, 삭제하는법을 기록해본다

 

 

 

Node.js MongoDB에 데이터베이스 컬렉션 추가 (일회성)

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  database = db.db("gansik");
  database.createCollection("gansik", function(err, res) {
    if (err) throw err;
    console.log("Collection created!");
    db.close();
  });
});

처음은 이렇게 컬렉션을 만들어주고

그다음부터 컬렉션에 데이터를 넣어야 조회가 되는 과정인듯하다

 

같은 이름의 컬렉션을 반복해서 추가할 경우, 에러가 발생하니 한번 생성한 컬렉션 이름은 잘 숙지하고

컬렉션을 추가할경우, 겹치지 않게 지정하자

 

 

 

Node.js MongoDB 컬렉션에 데이터 추가 (1개 일 때)

//DB에 등록
app.post('/register',function(request, response){	

	var body = request.body;
	
	console.log('saveDB 호출');
	saveDB(body.gansik);
	
	response.end();
});

//데이터베이스 등록
function saveDB(body){
	var databaseUrl = 'mongodb://localhost:27017/DB';
	MongoClient.connect(databaseUrl, function(err, db) {
	if (err) throw err;

	database = db.db("gansik");

	database.collection("gansik").insertOne(body, function(err, res) {
			if (err) throw err;
			console.log("등록이 완료되었습니다.");
			db.close();
		});
	});	
}

아직 1개씩만 저장하는 단계라 insertOne을 사용함

2개 이상의 데이터를 한번에 저장할 경우, insertMany 메서드를 사용한다

 

 

2개이상 저장 예시는 아래 사이트 참고

 

 

 

Node.js MongoDB 컬렉션에 저장된 DB 조회하기

//DB에서 가져오기
app.post('/find',function(request, response){		
	var body = request.body;
	
	console.log('findDB 호출');
	
	findDB();
});


function findDB(){	
	var url = "mongodb://localhost:27017/DB";

	MongoClient.connect(url, function(err, db) {
		if (err) throw err;
		  
		database = db.db("gansik");
		
		//모든 db 조회 가능
		database.collection("gansik").find({}).toArray(function(err, result) {
			if (err) throw err;
			console.log('DB에서 가져온 결과 : ');
			console.log(result);
			db.close();
		});
	});
	
}

콜백으로 받은 result를 출력해보면 여태까지 DB에 저장된 모든값들이 find().pretty() 양식으로 출력된다

 

 

 

Node.js 특정 키의 값만 출력하고 싶은 경우

MongoClient.connect(url, function(err, db) {
		if (err) throw err;
		  
		database = db.db("gansik");		
     
		//특정 db 조회 가능 - 이 예시는 _id랑 price값 출력 - find.pretty 양식으로 출력안되고 그냥 출력됨
		database.collection("gansik").find({}, { projection: { price:1} }).toArray(function(err, result) {
			if (err) throw err;
			console.log('DB에서 가져온 결과 : lat long menu');
			// console.log(' : '+result.lat_ +', '+result.long_+', '+result.menu);
			console.log(result);
			response.send(JSON.stringify(result));
			
			db.close();
            });
	});

price 키에 해당하는 값과 디폴트로 정해진 _id의 값만이 출력됨

만약 price에 0 값을 주거나 아예 입력을 하지 않는다면 price의 값은 출력이 되지않는다

 

따라서 특정 필드를 unique로 정해준 상태가 아니어서

_id가 디폴트로 정해진 경우{projection:{ _id: 0} } 을 입력한다면 _id 값은 출력되지 않음

 

특정 필드에 해당하는 값만 출력하고 싶을 때 사용하면 유용하겠다

 

 

 

Node.js 특정 키의 값만 출력하는 법 적용 예제

MongoClient.connect(url, function(err, db) {
		if (err) throw err;
		  
		database = db.db("gansik");		
     
		//0이면 그 필드값은 안보이고 필드 값이 1일경우의 값만 보임
		// _id 제외, name, menu, loc, price 출력 가능 - find.pretty 양식으로 출력됨
		database.collection("gansik").find({}, { projection: { _id:0, name:1, menu:1, loc:1, price:1} }).toArray(function(err, result) {
			if (err) throw err;
			console.log(result);
			response.send(JSON.stringify(result));
			
			db.close();
		});
	});

_id는 출력되지 않으며 저장된 디비에서 모든 name, menu, loc, price의 값들만 출력이 가능하다

 

 

 

 

 

Node.js MongoDB 특정 값을 가진 데이터 조회하기

MongoClient.connect(url, function(err, db) {
		if (err) throw err;
		  
		database = db.db("gansik");
		
		var findDB_ = menu;

		//쿼리 = 필터 사용해서 특정 값 조회 price가 2000원인 값의 모든 필드 조회 가능
		var query = { menu: findDB_ };
		
		database.collection("gansik").find(query).toArray(function(err, result) {
			if (err) throw err;

			console.log(result);
			response.send(JSON.stringify(result));
			
			db.close();
		});
	});

query에는 위에 적힌것처럼 저장된 DB에서

menu라는 키(key) 중에서 findDB_의 값을 가진 메뉴를 찾도록 한다

 

문자열을 검색해도 되고 나의 경우는 클라이언트가 요청한 정보를 검색하는걸 해보고싶어서

파라미터로 전달받은 변수 findDB_를 사용했다

 

 

 

Node.js DB에 있는 컬렉션 제거하기

	var databaseUrl = 'mongodb://localhost:27017/gansikDB';
	
	console.log('drop the db');
	
	MongoClient.connect(databaseUrl, function(err, db) {
		if (err) throw err;
		database = db.db("gansik");
		database.collection("gansik").drop(function(err, delOK) {
			if (err) throw err;
			if (delOK) console.log("Collection deleted");
			db.close();
		});
	});

 

 

 

이미 적용해본 코드와 추가해본 코드가 있어서

오타가 있을수있으니 혹시라도 에러가 발생한다면 알려주세요

 

 

 

참고 :

https://www.w3schools.com/nodejs/nodejs_mongodb_create_db.asp

 

Node.js MongoDB Create Database

Node.js MongoDB Create Database Creating a Database To create a database in MongoDB, start by creating a MongoClient object, then specify a connection URL with the correct ip address and the name of the database you want to create. MongoDB will create the

www.w3schools.com

 

 

 

반응형
반응형

자바스크립트 json 데이터 서버로 보내는법

 

Node.js express 모듈과 fetch 방식을 사용하면

POST 방식으로 보낸 데이터를 처리하는 방법이 기존의 ajax, xhr과 차이가 있다

 

 

 

fetch API

xhr, ajax 방식과 유사한데 가장 최근에 생겼고 최근 추세는 fetch api를 사용하는 듯함

아래는 사용 예시와 적용해본 방법

 

 

 

 

HTML

 

<form method="post" action="/">
    <input type="text" name="user[name]">
    <input type="text" name="user[email]">
    <input type="submit" value="Submit">
</form>

 

Javascript

 

function postTest(){
  fetch('/', {
      method: 'POST',
      headers: {
          'Content-Type': 'application/json'
      },
      body: JSON.stringify({
          user: {
              name: "John",
              email: "john@example.com"
          }
      })
  });
}

 

Node.js Express v4.16 이후

 

// Parse URL-encoded bodies (as sent by HTML forms)
app.use(express.urlencoded());

// Parse JSON bodies (as sent by API clients)
app.use(express.json());

// Access the parse results as request.body
app.post('/', function(request, response){
    console.log(request.body.user.name);
    console.log(request.body.user.email);
});

 

 

 

 

자바스크립트 JSON 데이터 POST로 서버에 전달해본 사용예시

 

function register(){
	var menu = document.getElementById("menu").value;
	var price = document.getElementById("price").value;
	var pay = document.getElementById("pay").value;
	
    var obj={"menu":menu,"price":price,"pay":pay};
    
    //POST 데이터를 보낼 url - ex) localhost/register
	fetch('/register', {
		method: 'POST',
		headers: {
			'Content-Type': 'application/json'
		},
		body: JSON.stringify({
			data:obj			
		})
	});
}

이렇게하면 json 구조는 { data : {"menu": menu, "price": price, "pay": pay} }가 된다

 

 

app.post('/registerAddr',function(request, response){	
	var body = request.body;
	
	console.log('body : ' + body.data.menu);
    //input으로 받은 menu 값 출력 확인
});

클라이언트에서 보낸 menu의 값을 확인할 수 있다

 

 

 

 

 

출처 : 

https://stackoverflow.com/questions/4295782/how-to-process-post-data-in-node-js

 

How to process POST data in Node.js?

How do you extract form data (form[method="post"]) and file uploads sent from the HTTP POST method in Node.js? I've read the documentation, googled and found nothing. function (request, response)...

stackoverflow.com

 

반응형
반응형

클라이언트에서 서버로 이미지를 보낼때 방법이 몇가지 있는데 그중 base64로 인코딩하여

이미지를 보내는 방법을 사용해본 내용이다

 

 

※ base64란?

8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식

 

전자 메일을 통한 이진 데이터 전송 등에 많이 쓰이고 있다. 모두 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.

 

인코딩된 문자열은 알파벳 대소문자와 숫자, 그리고 "+", "/" 기호 64개로 이루어지며, "="는 끝을 알리는 코드로 쓴다.

 

 

 

 

내가 구현하고 싶은것

클라이언트는 이미지를 base64 인코딩하여 서버로 전달한다

 

서버는 클라이언트에서 전달받은 base64 이미지에, 특정한 처리를 하고 다시 클라이언트로 결과를 보내준다

이때, 받은 base64 인코딩된 이미지를 웹 페이지에 보여주는 방법을 함께 기록해보았다

 

 

이미지를 base64 방식으로 인코딩 하는법

 

// Select the image
const img = document.querySelector('#testImg');

img.addEventListener('load', function (event) {
   getDataUrl(event.currentTarget);
   //console.log(dataUrl);
});

사용자가 선택한 이미지가 로드 완료되는 순간

getDataUrl을 호출하여 base64 인코딩을 시작한다

 

function getDataUrl(img) {
   // Create canvas
   const canvas = document.createElement('canvas');
   const ctx = canvas.getContext('2d');
   // Set width and height
   canvas.width = img.width;
   canvas.height = img.height;
   // Draw the image
   ctx.drawImage(img, 0, 0);
   
   var base64 = canvas.toDataURL('image/*');
   strImage = base64.replace(/^data:image\/[a-z]+;base64,/, "");
   }

 

 

 

html에서 인코딩된 base64 img 보여주는법

<img src="data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MEVBMTczNDg3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MEVBMTczNDk3QzA5MTFFNjk3ODM5NjQyRjE2RjA3QTkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDowRUExNzM0NjdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDowRUExNzM0NzdDMDkxMUU2OTc4Mzk2NDJGMTZGMDdBOSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PjjUmssAAAGASURBVHjatJaxTsMwEIbpIzDA6FaMMPYJkDKzVYU+QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN+jAK3gEd+AlGMGIBFDgFvzouK3JV/lihQTOwLtOtw9wIRG5pJn91Tbgqk9kSk7GViADrTD4HCyZ0NQnomi51sb0fUyCMQEbp2WpU67IjfNjwcYyoUDhjJVcZBjYBy40j4wXgaobWoe8Z6Y80CJBwFpunepIzt2AUgFjtXXshNXjVmMh+K+zzp/CMs0CqeuzrxSRpbOKfdCkiMTS1VBQ41uxMyQR2qbrXiiwYN3ACh1FDmsdK2Eu4J6Tlo31dYVtCY88h5ELZIJJ+IRMzBHfyJINrigNkt5VsRiub9nXICdsYyVd2NcVvA3ScE5t2rb5JuEeyZnAhmLt9NK63vX1O5Pe8XaPSuGq1uTrfUgMEp9EJ+CQvr+BJ/AAKvAcCiAR+bf9CjAAluzmdX4AEIIAAAAASUVORK5CYII=">

 

 

자바스크립트에서 base64 인코딩 이미지 보여주는법

document.getElementById('img').src = "data:image/;base64,"+data;

html 이미지 태그 중 id가 img인 객체에 base64 인코딩 이미지 넣는법

 

"data:image/;base64," + "실제 base64 인코딩된 이미지 데이터"

 

data:image/;base64, : 이 부분이 base64 인코딩 이미지를 넣어주는 부분이라고 보면 될듯

 

 

 

 

참고 : 

 

base64란

 

https://stackoverflow.com/questions/201479/what-is-base-64-encoding-used-for

 

What is base 64 encoding used for?

I've heard people talking about "base 64 encoding" here and there. What is it used for?

stackoverflow.com

https://ko.wikipedia.org/wiki/%EB%B2%A0%EC%9D%B4%EC%8A%A464

 

베이스64 - 위키백과, 우리 모두의 백과사전

컴퓨터 분야에서 쓰이는 Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자

ko.wikipedia.org

 

 

 

base64 이미지 인코딩하는법

 

https://stackoverflow.com/questions/6150289/how-can-i-convert-an-image-into-base64-string-using-javascript

 

How can I convert an image into Base64 string using JavaScript?

I need to convert my image to a Base64 string so that I can send my image to a server. Is there any JavaScript file for this? Else, how can I convert it?

stackoverflow.com

 

 

base64 이미지 보여주는법

 

https://stackoverflow.com/questions/8499633/how-to-display-base64-images-in-html

 

How to display Base64 images in HTML

I'm having trouble displaying a Base64 image inline. How can I do it?...

stackoverflow.com

 

 

반응형

+ Recent posts