1. Node.js 심화과정
신촌 크레바스 스터디 - 3주차 첫번째
로그인/회원가입, 이미지 업로드, 몽고DB
홍석유
syhong0714@gmail.com
2. 3주차 첫번째 스터디 Node.js
express
실제 서비스 구축
Express generator를 활용해
초기 파일구조를 확립
express -e ejs -c less moca_server
3. 3주차 첫번째 스터디 Node.js
라우팅Routes라는 디렉토리를 만들고 API를 구조화
var routes = require('./routes/index');
var users = require('./routes/users');
var users2 = require('./routes/users2');
var books = require('./routes/books');
var proposals = require('./routes/proposals');
var ejsbooks = require('./routes/ejsbooks');
app.use('/', routes);
app.use('/users', users2);
app.use('/api/1/users', users);
app.use('/api/1/books', books);
app.use('/api/1/proposals', proposals);
->
4. 3주차 첫번째 스터디 Node.js
API 리소스해당 리소스에 대한 작업은 해당 리소스에서
app.use('/', routes);
app.use('/users', users2);
app.use('/api/1/users', users);
app.use('/api/1/books', books);
app.use('/api/1/proposals', proposals);
GET, POST, PUT, DELETE
5. 3주차 첫번째 스터디 Node.js
./routes/users.jsusers 리소스 api
최상단
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var client = mysql.createConnection({
host: 'localhost',
user: 'root',
database: 'test'
});
6. 3주차 첫번째 스터디 Node.js
모델/작가
리스트 조회
users 리소스 api
/* 모델/작가 리스트 조회(select) - user_type: M(모델), P(작가) +++ 나중에 시
간되면 쿼리스트링 더 넣어서 필터도 만들기!!! */
// moca.com/api/1/users?user_type=M
router.get('/', function(req, res, next) {
var user_type = req.query.user_type;
if (user_type == 'P' || 'M' ) {
client.query('SELECT * FROM user WHERE user_type = ?', user_type, function
(err, rows, fields) {
if(err) {
console.log(err);
}
varusers = [];
rows.forEach(function(row) {
users.push({
id : row.id,
username : row.username,
address : row.address,
price : row.price,
user_type : row.user_type
});
});
res.json({users: users});
});
}
});
router/get(‘/’, callback)
7. 3주차 첫번째 스터디 Node.js
Users 생성
(회원가입)
router/post(‘/’, callback)
/* users 생성(회원가입, insert) */
// moca.com/api/1/users
router.post('/', function(req, res, next) {
var data = {
'username': req.body.username,
'address' : req.body.address,
'price' : req.body.price
}
client.query('INSERT * into user SET ?', data, function(err,
rows, fields) {
if (err) {
conosole.log(err);
}
res.status(200);
});
});
8. 3주차 첫번째 스터디 Node.js
Users
(회원정보수정)
router/put(‘/:user_id’, callback)
/* 모델/작가 등록하기 & 정보수정하기 - 가입하기와 다름.
이들은 가입을 했기 때문에 user_id를 발급받았음 */
// moca.com/api/1/users/2?user_type=M
router.put('/:user_id', function(req, res, next) {
var user_id = req.params.user_id;
var user_type = req.query.user_type;
client.query('UPDATE user SET user_type = ? WHERE id = ?',
[user_type, user_id], function(err, rows, fields) {
if (err) {
console.log(err);
}
});
});
9. 3주차 첫번째 스터디 Node.js
Users
(전체유저 조회)
Router/get(‘/’, callback)
/* 전체 유저 조회 - 나중에 admin 만들 때 활용 */
// moca.com/api/1/users
router.get('/', function(req, res, next) {
var user_type = req.query.user_type;
client.query('SELECT * FROM user WHERE user_type = ?',
user_type, function (err, rows, fields) {
if(err) {
console.log(err);
}
varusers = [];
rows.forEach(function(row) {
users.push({
id : row.id,
username : row.username,
address : row.address,
price : row.price,
user_type : row.user_type
});
});
res.json({users: users});
});
});
10. 3주차 첫번째 스터디 Node.js
books
(전체사진첩 조회)
Router/get(‘/’, callback)
/* books 전체에 대한 조회(select) */
router.get('/', function(req, res, next) {
client.query('SELECT b.id AS books_id, b.username AS
books_username, i.img_url AS img_url_img_url FROM books b
JOIN img_url i ON b.img_url1 = i.id', function (err, rows, fields) {
if(err) {
console.log(err);
}
varbooks = [];
rows.forEach(function(row) {
books.push({
id : row.books_id,
username : row.books_username,
img_url : row.img_url_img_url
});
});
res.json({books: books});
});
});
11. 3주차 두번째 스터디 Node.js
쿠키와 세션
데이터를 어디에 저장할 것인가?
보안, 데이터의 양, …
connect.sid 사용자의 식별자
(아이디와 비밀번호를 브라우저에 저장하지 않는다)