반응형

 

 

 

'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

 

반응형
반응형

html 페이지에서 메뉴를 선택하고 선택한 정보를 출력하고 싶어서 사용해본 셀렉트 태그

아래의 빈 공백은 텍스트입력하는 input 태그이므로 신경안써도됨

 

 

 

html

<select class="form-control" id="menu" name="menu" required>
    <option value="" disabled selected>메뉴</option>
    <option value="boong">붕어빵</option>
    <option value="tako">타코야키</option>
    <option value="ddang">땅콩과자</option>
    <option value="other">그 외 간식</option>
</select>

 

select 태그에 required 속성을 덧붙여주면 해당 셀렉트 태그의 선택이 필수 선택으로 지정된다

 

나중에 form 형식에 셀렉트 태그를 넣은 다음 서버로 정보를 전달할 때 쏠쏠함

회원가입 경우, *필수 입력 정보가 필요할 때 쓰면된다

 

 

위의 이미지를 바탕으로 기록해보면

메뉴에 대해서 반드시 옵션 값을 선택해야하며, 메뉴라고 적혀있는 옵션 값은 선택이 불가능하다

각각의 메뉴의 value 값은 자바스크립트에서 데이터를 얻어올 때 유용하게 쓰인다

 

사용자에게 보여질 텍스트는 옵션 태그 사이에 넣어주면 된다

 

 

javascript

async function register(){
	var menu = document.getElementById("menu").value;
	console.log("선택한 메뉴 : "+menu);
}

위의 코드처럼 작성해보면 선택한 메뉴를 출력해볼 수 있다

저장이 필요하다면 위의 방식처럼 옵션의 value에 접근하여 저장하거나 데이터를 가공하면 되겠다

 

 

 

좀더 고급지게 작성할 수 있는데 일단 제일 쉽고 간단한 방법을 사용했음

다양한 방법을 덧붙인 사용을 원하면 아래 mdn 참고하자

 

 

참고 : https://developer.mozilla.org/ko/docs/Web/HTML/Element/select#attr-disabled

 

<select> - HTML: Hypertext Markup Language | MDN

HTML <select> 요소는 옵션 메뉴를 제공하는 컨트롤을 나타냅니다.

developer.mozilla.org

 

반응형
반응형

 

 

 

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

 

반응형
반응형

요즘은 눈이 부셔서 폰이나 PC화면을 배경색이 어두운 다크모드로 거의 사용하고 있다보니까

내가 만든 웹사이트도 어둡게 보였으면 해서 찾아본 배경 글자 반전 다크모드

 

반전 예제

 

css

/* 다크모드 */
.dark-mode {
  background-color: #3e3a3a;
  color: white;
}

참고로 여기서 사용한 배경색은 완전한 검정색은 아니고 조금 진한 먹색

 

 

javascript

//다크모드
function useDarkMode() {
  var element = document.body;
  element.classList.toggle("dark-mode");
}

window.onload = function() { 	
	useDarkMode();
	
}

위의 코드처럼 작성을 해두면

css랑 자바스크립트만 수정해줘도 다크모드 사용이 가능하다

 

대신 동적으로 생성되는 객체들은 적용되는게 좀 차이가 있을수있다

 

 

나는 버튼 클릭 없이 아예 웹페이지가 열릴때 자동으로 다크모드를 실행하고 싶어서 위의 코드처럼 작성함

 

버튼클릭으로 배경 글자색을 반전하는 다크모드는 아래의 w3schools 참고하자

 

 

이 방식 말고도 되게 다양하게 다크모드를 적용할수있는데

나는 이방법이 제일 간단해서 일단 이렇게 사용했음

 

 

참고 : 

 

https://www.w3schools.com/howto/howto_js_toggle_dark_mode.asp

 

How To Toggle Between Dark and Light Mode

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

반응형
반응형

 

 


XML(Extensible Markup Language)
XML 구문은 매우 간단하고 구조적이어서 익히기 쉽고 사용하기 쉽다

간략 요약

 


XML 선언법


1. XML문서의 맨 앞에 선언해야된다
2. 맨 앞에 적은 <xml>태그를 XML 프롤로그라 하며, 이때 사용하는 xml 태그는 소문자로만 적는다

XML Prolog(프롤로그)
1. 버전을 명시한다
2. 문자 인코딩을 설정하며, 기본값은 UTF-8이다
3. 파싱할 외부 문서 여부를 설정할 수 있다

 


 

상세 내용


XML 문법


1. 모든 요소의 부모요소인 root element를 하나만 갖는다
2. 모든 xml 태그는 닫는 태그가 필요하다
3. 태그는 대소문자를 구별한다
4. 상위 단계의 태그보다 하위 단계의 태그가 먼저 닫힌다
5. 태그의 값은 따옴표(")로 감싸야 된다
6. html과 달리 띄어쓰기를 인식한다



XML 기초

XML 문서들은 모든 elements들의 부모 요소인 root element를 하나만 가져야 한다
모든 XML 태그들은 닫는 태그가 필요하다

태그들은 대소문자를 구별하며(case sensitive) 부모 태그는 자식태그보다 나중에 닫는다

예시)

<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

<p><strong>이 구문은 오류를 발생합니다.</p></strong>
<p><strong>이 구문이 정확한 순서입니다.</strong></p>


※<p>가 부모태그라면 <strong>이 자식태그로, <strong>태그가 먼저 닫혀야된다


아래의 XML 구문에서 root element는 note 이다

<?xml version="1.0" encoding="UTF-8"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>



태그의 값은 따옴표로 감싸주어야한다

<student name=abc>   // 오류
<student name="abc"> // 정상



몇개의 문자열들은 xml 태그 내에서 사용할 때, 이스케이프가 필요하다

xml escape 기호 의미
&lt; < 보다 작다
&gt; > 보다 크다
&amp; & 그리고
&apos; ` '
&quot; " 따옴표


활용 예시

<message>salary &lt; 1000</message>
<!-- salary < 1000 -->



주석은 html 문서와 같이 <!-- -->를 사용한다

<!-- 올바른 주석 -->



주석 중간에 하이픈2개를 연달아 쓰면 안된다

<!-- 올바르지 않은 -- 주석 -->




XML 프롤로그

 


다음과 같은 표현을 XML prolog(프롤로그) 라고 한다

<?xml version="1.0" encoding="UTF-8"?>



XML1.0 버전에서의 XML prolog는 필수사항은 아니며, 만약 사용하고자 한다면 문서의 맨앞에 적어야 한다

XML prolog는 XML 선언, 처리 지시사항들, 주석과 문서 타입 정의에 관한 내용들이 포함된다

XML 1.1 버전은 XML 선언을 필수로 해줘야한다 선언이 없다면, 1.0버전으로 인식하게된다
XML문서의 시작부터 루트 노드이전까지의 모든 것이 XML의 prolog이다


XML 문서는 전세계언어를 포함하고 있어
노르웨이나 프랑스어의  øæå, êèé 와 같이 악센트 표기가 가능한 알파벳을 사용할 수 있다


아래의 XML 구문은 1.1버전이지만

<?xml version="1.1"?>
<greeting>Hello, world!</greeting>


아래의 버전은 XML 선언이 없으므로 XML 1.0버전이다

<greeting>Hello, world!</greeting>




예시와 설명을 곁들인 버전

다음은 PDS4 코어 네임스페이스를 참고한 샘플 프롤로그이다

<?xml version="1.0" encoding="UTF-8"?>
   <?xml-model href="http://pds.nasa.gov/pds4/pds/v1/PDS4_PDS_1201.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
   <?xml-model href="http://pds.nasa.gov/pds4/disp/v1/PDS4_DISP_1100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
   <?xml-model href="http://pds.nasa.gov/pds4/sp/v1/PDS4_SP_1100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
   <?xml-model href="http://pds.nasa.gov/pds4/geom/v0/PDS4_GEOM_0520.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
   <?xml-model href="http://pds.nasa.gov/pds4/sbn/v0/sbnDD_0100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>
   <?xml-model href="http://pds.nasa.gov/pds4/mission/epoxi/v0/epoxiDD_0100.sch" schematypens="http://purl.oclc.org/dsdl/schematron"?>


첫번째 줄은 XML 선언으로 이용하려는 XML의 버전과 문자열 인코딩 방식을 보여준다
XML 선언은 XML 문서의 맨 앞줄에 적어야 하며, 프롤로그의 <xml> 태그는 소문자로 사용해야한다


추가로 XML 선언 시 standalone 을 추가할수있다

<?xml version="1.0" encoding="UTF-8" standalone="no"?>


standalone의 기본값은 no이며,
standalone은 외부 DTD(Document Type Definition)와 같이
외부 소스의 데이터에 의존하는 문서인지 XML 파서에게 알려주는 역할을 한다

yes인 경우, 문서를 파싱할 때 참조해야할 외부 소스가 있다는 것을 의미



마지막으로 XML 프롤로그 내, 따옴표 안에서의 공백은 피해야하며, 따옴표 바깥의 공백은 걱정하지 않아도 된다
※여기서의 공백은 스페이스 바를 사용한 한칸 띄워쓰기, tab을 이용한 들여쓰기,

그리고 \n을 이용한 줄바꿈을 의미한다

 


따라서 다음과 같은 xml은 올바른 사용 예시임

 <?xml 
      version="1.0"
      encoding="UTF-8"
      standalone="no"?>





참고 사이트

XML 구문 기초
https://www.w3schools.com/xml/xml_syntax.asp

http://www.tcpschool.com/xml/xml_basic_syntax

https://sbnwiki.astro.umd.edu/wiki/Anatomy_of_the_XML_Prolog


XML 특수문자 사용
https://docs.microsoft.com/ko-kr/dotnet/desktop/wpf/advanced/how-to-use-special-characters-in-xaml?view=netframeworkdesktop-4.8


XML 전반적인 설명
https://support.microsoft.com/ko-kr/office/%EC%B4%88%EB%B3%B4%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-xml-%EC%84%A4%EB%AA%85-a87d234d-4c2e-4409-9cbc-45e4eb857d44


XML 선언 prolog 규칙 설명
https://stackoverflow.com/questions/7007427/does-a-valid-xml-file-require-an-xml-declaration


standalone 설명
https://stackoverflow.com/questions/5578645/what-does-the-standalone-directive-mean-in-xml

반응형
반응형

 

 

파일첨부를 하는데 파일선택과 선택된 파일없음이라는 문구가 너무 거슬려서

인풋 파일 태그 내용 변경해본 기록

 

 

단순하게 인풋 파일태그를 숨기고 다른 텍스트로 대체한 상태

<input type="file" id="imgUpload" onchange="previewFile()" style="display:none;"></input>
<label for="imgUpload">이미지 추가</label>

 

기존의 못생긴 파일 선택녀석을 이렇게 단순 라벨링을 할수있다

 

아래의 등록하기의 경우 내가 임의로 submit 기능의 버튼을 추가한것이니 걱정ㄴㄴ

 

 

라벨링에 css 커스터마이징을 추가한 다른 형태

label {
   cursor: pointer;
   /* Style as you please, it will become the visible UI component. */
}

#upload-photo {
   opacity: 0;
   position: absolute;
   z-index: -1;
}
<label for="upload-photo">Browse...</label>
<input type="file" name="photo" id="upload-photo" />

 

 

 

참고 : https://stackoverflow.com/questions/572768/styling-an-input-type-file-button

 

Styling an input type="file" button

How do you style an input type="file" button?

stackoverflow.com

 

반응형
반응형

 

 

 

카카오맵 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

 

 

반응형
반응형

※공부를 위해 영어번역이 들어갔으므로 틀린부분이 있다면 알려주세요

 

먼저 lexical scope는 제한적인 범위 (= static scope / 정적 범위 라고도 불림)이며

이는 C언어의 문법과 유사한 개념이다

 

 

요약하면

선언한 곳에서의 사용만 가능한 것들

선언된 외의 지역에서 사용 시, 문제가 생기는 것들

 

 

아래는 상세 이해를 돕는 예시들

 

 

스피드 웨건) 스코프란?

스코프 (MDN said)

현재 실행되는 컨텍스트를 말한다.

컨텍스트는  표현식이 "표현"되거나 참조 될 수 있음을 의미

(= 현재 실행되는 값 또는 표현 = 스코프 = 간단하게 현재 실행중인 범위)

 

만약 변수 또는 다른 표현식이 "해당 스코프"내에 있지 않다면 사용할 수 없다.

(= 특정 함수 내에서 선언된 변수는, 그 함수 밖에서 사용이 불가능한것과 같음)

 

스코프는 또한 계층적인 구조를 가지기 때문에

하위 스코프는 상위 스코프에 접근할 수 있지만 반대는 불가하다.

(이게 중요한듯)

 

함수 자바스크립트에서 클로저 역할을 하기 때문에

스코프를 생성하므로

함수 내에 정의된 변수는 외부 함수나 다른 함수 내에서는 접근 할 수 없다.

 

 

 

이제 다시 lexical scope에 대한 예제를 보자

void fun()
{
    int x = 5;

    void fun2()
    {
        printf("%d", x);
    }
}

모든 내부 단위 함수(임의로 표현)는 그 바깥 단 함수의 변수에 접근이 가능하지만

반대로의 접근은 불가능하다

 

위의 코드를 기준으로 보면, func2 함수는 앞서 표현한 내부 단위 함수로,

func 함수 내의 변수(int x=5;)에 접근이 가능하다

 

-> 이러한 접근이 lexical scope

 

 

또 다른 예제

var scope = "I am global";
function whatismyscope(){
   var scope = "I am just a local";
   function func() {return scope;}
   return func;
}

whatismyscope()()

결과 : I am just a local

(I am a global 이 아닌, I am just a local로 출력이 됨)

 

func 함수는, whatismyscope 함수의 범위 아래에서 정의된 것을 접근할수있기 때문

 

 

" functions are executed using the scope chain that was in effect when they were defined "

 

=함수는 정의된 범위에서 *scope chain을 이용해 실행된다

(scope chain : 위의 코드 예로, func에서 없는 scope 변수를 윗 단인 whatismyscope 내에서 찾아내는것 또는 이런 방식)

 

 

= 정의된 곳에서 사용 가능하도록 되는것,

그것이 함수

무스비

 

 

 

 

간략하게 대비되는 성질로는 dynamic scope (= 동적 스코프)가 있다

= 선언되고 나서 어디에서든 접근이 가능한 범위

 

 

 

 

출처 :

lexical scope 란?

https://stackoverflow.com/questions/1047454/what-is-lexical-scope

 

What is lexical scope?

What is a brief introduction to lexical scoping?

stackoverflow.com

 

스코프 란?

https://developer.mozilla.org/ko/docs/Glossary/Scope

 

스코프 - 용어 사전 | MDN

현재 실행되는 컨텍스트를 말한다. 여기서 컨텍스트는  값과 표현식이 "표현"되거나 참조 될 수 있음을 의미한다. 만약 변수 또는 다른 표현식이 "해당 스코프"내에 있지 않다면 사용할 수 없

developer.mozilla.org

 

반응형

+ Recent posts