목록백엔드/Node.js (7)
프로그래밍 공부방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CjLlk/btskIcgeQs8/ND5zk3siTLSwMfKxC0vWGK/img.png)
🔥에러 내용 PM2란 node.js의 프로세스 관리자입니다. PM2를 이용해서 이용해서 Node.js 서버를 무중단 배포할 수 있습니다. 저도 제가 만든 node.js 서버를 중단하지 않고 계속 돌리기 위해서 PM2를 이용했는데요... 문제가 생겼습니다... 🤷♀️Why?🤷♀️ 로컬 pm2를 실행시켜야하는데 node_modules에 로컬 pm2와 글로벌 pm2가 설치되어있을 경우에 글로벌 pm2로 실행이 되어서 이런 오류가 날 수 있다고 하네요. ✨해결 방법 프로젝트 폴더로 이동한 후에 아래처럼 입력해주었습니다. $ ./node_modules/.bin/pm2 install typescript $ ./node_modules/.bin/pm2 start [실행시킬 파일] --watch 잘 실행되는 것을 확..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/IdslQ/btrJBVHE1yJ/F86kNpGJ7p6CSks375cYak/img.jpg)
우선 회원가입을 할 때 입력받은 패스워드를 암호화해서 db에 넣어야겠죠? 그렇기 때문에 회원가입 코드에서 패스워드를 암호화하는 작업을 해줍니다. 사용한 패스워드 암호화 방식은 bcrypt 모듈을 이용한 단방향 암호화입니다. 단방향 암호화이기 때문에 복호화를 해서 원래의 패스워드는 확인이 불가능합니다! 원래는 아이디는 양방향 암호화를 해서 넣으려고 했지만 그렇게 되면 아이디 중복 등과 같이 비교를 할 때 힘들어질 것 같아서 따로 암호화는 하지 않았습니다. 단방향 암호화: 암호화를 한 후에 다시 복호화하는 것이 불가능하다. 양방향 암호화: 암호화를 한 후에 다시 복호화하는 것이 가능하다. bcrypt로 패스워드 암호화 bcrypt.hashSync() /* signup.js */ const express = ..
클라이언트 측에서 httpRequest를 서버로 보낸 후 서버에서 request를 하려고 하는데 문제가 생겼습니다. 왜 문제가 생겼을까요? 코드는 아래와 같습니다. /* signup.js 클라이언트 코드*/ signup_btn.addEventListener("click", function(e) { if(pw.value && pw.value === pw_check.value){ // pw값과 pw체크값이 같다면 if (id.value == ''){ // id 값이 비어있다면 alert("아이디를 입력하세요"); } else { // id값이 비어있지 않다면 makeRequest('http://localhost:5000/signup/process', id.value, pw.value); } }else{ //..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b76IDL/btrIKnrXYdm/MayRITnavLBKhI3kkyXeKK/img.jpg)
로그인 기능을 구현하기 위해서 먼저 세션을 공부해보겠습니다! 먼저 아래와 같이 입력해서 설치해주세요. npm install -s express-session npm install express-mysql-session MYSQL 세션 저장 저는 mysql에 세션을 저장하는 방식을 이용했습니다. 그렇기 때문에 mysql도 미리 설치를 해주고 시작해주세요. options에는 본인 데이터베이스의 포트번호와 패스워드 등을 입력해주세요. const session = require("express-session"); const MySQLStore = require('express-mysql-session')(session); var options = { host: "localhost", port: 포트번호, use..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bW5lVd/btrIjMfbB1j/tSaTnA7QhVzOCJq3FlFanK/img.jpg)
HTML 파일에서 중복으로 사용되는 부분을 계속 코드를 작성해서 따로 넣어주기에는 비효율적인 일입니다. 따라서 ejs파일로 만들어서 html 파일 안에 다른 html 코드를 include 해주도록 하겠습니다. 1. app.js 코드 var fs = require('fs'); const ejs = require("ejs"); app.get('/', function(req, res){ fs.readFile('./views/index.ejs', "utf-8", function(error, data){ res.writeHead(200, {'Content-Type': 'text/html' }); res.end(ejs.render(data)); }) }) ejs를 사용하기 위해서 ejs 모듈을 require 해주세..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mJuVm/btrGRkirLtW/rnkUgjyRq56M5FVw05FMN1/img.jpg)
저는 식물 커뮤니티 프로젝트를 진행하고 있었습니다. 문제없이 잘 진행하고 있다가 openAPI에서 값을 받아온 후 화면에 출력하는 과정에서 문제가 생겼는데...ㅠ 바로 CORS 에러!!!!!!!!!!! 동일한 출처일 땐 자원에 접근할 권한이 주어지지만 그렇지 않을 때는 권한이 없기 때문에 생기는 에러입니다. 프론트엔드쪽만 공부하면서 개발하고 있었기 때문에 이 문제도 프론트엔드 상에서 해결하려고 했습니다. 하지만.. 실패... !!!!!!! -_-.... 저는 클라이언트쪽에서 공공데이터포털쪽 서버로 XMLHttpRequest를 이용해서 바로 데이터를 요청했습니다. 그렇게 한 결과 위에 사진처럼 cors 에러가 생겼죠 좀 더 알아보니깐 cors 에러를 해결하려면 서버 측에서 코드를 수정해야했습니다. 저는 기..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xq9J8/btrGPqdhVGu/k93jI8V8V6PjKKxCKc2MS1/img.jpg)
사용된 openAPI : 산림청 국립수목원_식물자원 서비스 | 공공데이터포털 (data.go.kr) 1. parser.toJson(xml데이터) : xml → json 이 때 parser = require(xml2json') 입니다. parser.toJson은 xml을 json 형태로 바꾸어줍니다. 결과값 보시면 json으로 잘 바뀐 것을 확인할 수 있습니다. 2. JSON.parse( ) : json 데이터 → js 객체 위에 json 데이터를 JSON.parse()를 해 준 후의 결과입니다. typeof로 위 결과값이 어떤 타입인지 확인해보면 object로 뜹니다. 위 결과값을 결과를 요청한 클라이언트쪽으로 전달한 후에 console.log로 확인했을 때의 결과입니다. js 객체로 바꾼 후에는 아래와..