목록Node (11)
똑같은 삽질은 2번 하지 말자
post로 온 데이터를 파싱할때, bodyParser var bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended:true})); app.post('/email_post', function(req,res){ console.log(req.body.email); }); json -> json 데이터를 받을 수 파싱할 수 있게됨 urlencoded -> 클라이언트에서 인코딩된 데이터를 파싱할 수 있게됨. 순수 자바스크립트로 짠 ajax 처음 봐서 스샷첨부 응답 메소드 다음 표에 표시된 응답 오브젝트에 대한 메소드(res)는 응답을 클라이언트로 전송하고 요청-응답 주기를 종료할 ..
$ npm install nodemon -g 코드 변경을 자동으로 감지해서 서버를 올렸다 내렸다하는 플러그인 -g : 내 pc의 어느 디렉토리에서든지 사용한다는 말 사용법 $ nodemon app.js $ nodemon app.js localhost 3000 $ nodemon --debug app.js 80 Routing 처리 app.get('/', function(req,res){ res.sendFile(__dirname + "/public/index.html"); }); __dirname : node에서 현재 파일의 경로를 제공해주는 변수 static 디렉토리 설정 (해당 디렉토리 안에 있는 파일들이 자동으로 등록) app.use(express.static('public'));
populate : Mongoose의 document(Table)이 다른 document의 ObjectId를 사용하고 있을때, 해당 ObjectId의 요소들을 가져오기 위한 편리한 기능이다. var PostSchema = mongoose.Schema({ writer: { type: mongoose.Schema.ObjectId, ref: 'users7' // users7 컬렉션을 Reference } }); var UserSchema = mongoose.Schema({ email: { type: String, 'default': '' }, hashed_password: { type: String, 'default': '' }, name: { type: String, index: 'hashed', 'defa..
Cipher : 일반적인 암호화로 평문 -> 암호문 -> 복호문(평문)의 방식으로 암호화하고 복호화 합니다. 즉, 암호화를 하기 위한 Key 를 가지고 암호화하며, 복호화합니다. Hmac: 암호화를 하면 다시 되돌릴 수 없기 때문에, 암호화 된 암호문 그 자체를 이용합니다. 흔히 웹사이트 가입하면 운영자도 가입정보를 알 수 없다고 하는건 이렇게 Hmac으로 암호화되어서 입니다. Module 가져 온뒤, 사용해보겠습니다. 1.Cipher 방식을 이용한 암호화 var crypto = require('crypto'); // 암호화 var cipher = crypto.createCipher('aes256','password'); // aes256 방식으로 password(key)로 암호화하겠다. cipher.u..
Serialize와 Deserialize 로그인이 성공하면, var LocalStrategy = require('passport-local').Strategy; module.exports = new LocalStrategy({ usernameField: 'email', passwordField: 'password', passReqToCallback: true // 이 옵션을 설정하면 아래 콜백 함수의 첫번째 파라미터로 req 객체 전달됨 }, function (req, email, password, done) { console.log('passport의 local-login 호출됨 : ' + email + ', ' + password); var database = req.app.get('database'..
Socket 통신 Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식 Socket통신은 Http 통신과 달리 Server와 Client가 특정 Port를 통해 연결을 성립하고 있어 실시간으로 양방향 통신을 하는 방식입니다. Client만 필요한 경우에 요청을 보내는 Http 통신과 달리 Socket 통신은 Server 역시 Client로 요청을 보낼 수 있으며, 계속 연결을 유지하는 연결지향형 통신이기 때문에 실시간 통신이 필요한 경우에 자주 사용됩니다. 예를 들면, 실시간 Streaming 중계나 실시간 채팅과 같이 즉각적으로 정보를 주고받는 경우에 사용합니다. 예를 들어 실시간 동영상 Streaming 서비스를 Http 통신으로 구현하였다고 가정하겠습니다. 이러한 경..
Node.js에서 익스포트되는 객체는 module.exports이다. module.exports 빈 오브젝트({})로 초기화되어 있다. exports는 module.exports를 참조하는 변수이다. 즉, 사용하는 방식과 본인이 할당하고자 하는것이 무엇인지에 따라 사용할 수 있거나 사용할 수 없다. exports = {} 객체 할당 X module.exports = {} 객체 할당 O exports.kwak = 5; 속성 할당 O module.exports.kwak = 5 속성 할당 O
In mongodb version >= 3.0, That database variable is actually the parent object of the object you are trying to access with database.collection('whatever'). To access the correct object, you need to reference your database name, for me that was by doing mongodb 버전 3.0이상을 사용할 때는, connection을 할 때에 database명을 명시해야 한다는 것이다. function connectDB(){ // 데이터베이스 연결정보 var databaseUrl = 'mongodb://localhost:..
1. http 내장모듈만 쓰는 것과 뭐가 틀린가? http모듈로만 post body를 파싱하려면, (post 방식으로 요청이 들어올때 그 내용을 parsing 하는것입니다.) req.on('data', function(chunk) { body += chunk; }); 와 같이 이벤트를 등록해야한다. 그다음에 인코딩처리를 해줘야한다. 그치만, body-parser를 쓰면 bodyParser.urlencoded()를 등록하면, 자동으로 req에 body속성이 추가되고 저장된다. 만약 urls에 접근하고싶다면, req.body.urls이다. 인코딩도 default로 UTF-8로 해준다. 이벤트등록할 필요 자체가 사라진다. var bodyParser = require('body-parser'); app.use(..
요청 객체 (Request) 일반적으로 req / parameter 명 이므로 원하는 이름 대로 Methods req.params : 이름 붙은 라우트 파라미터를 담는다. ex : app.get(’/:idx’, (req, res) => { res.send(req.params.idx); }); -> req.params(name) : 이름 붙은 라우트 파라미터나 GET, POST 파라미터를 담는다. 하지만 여러가지 혼란을 줄 수 있어 사용하는 것을 지양해야한다. req.query : GET 방식으로 넘어오는 쿼리 스트링 파라미터를 담고 있다. req.body : POST 방식으로 넘어오는 파라미터를 담고있다. HTTP의 BODY 부분에 담겨져있는데, 이 부분을 파싱하기 위해 body-parser와 같은 패키..