git contribution 반영이 안될 때, git config 파일에서 git username, email 을 변경함으로써 반영 가능!
여태 왜 커밋이 안되나 했다. git은 참 신기하다.
오늘 배운 것>
1. show, edit, update, delete
2. ejs에서 <a tag> 로는 get 만 요청할 수 있어서 <form> 으로 Delete 를 처리한다.
3. 자바스크립트
내일 공부할 것>
사진+기사 업로드 가능한 게시판 만들기
var express = require("express");
var mongoose = require("mongoose");
var bodyParser = require("body-parser"); //body-parser module을 bodyParser 변수에 담는다.
var methodOverride = require("method-override");
var app = express();
require('dotenv').config(); // .env파일에서 환경변수 불러오기
//DB setting
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
mongoose.set('useUnifiedTopology', true);
mongoose.connect(process.env.MONGO_URI);
var db = mongoose.connection;
db.once("open", function() {
console.log("DB connected");
});
db.on("error", function(err) {
console.log("DB ERROR: ", err);
});
//Other settings
app.set("view engine", "ejs");
app.use(express.static(__dirname+"/public"));
app.use(bodyParser.json()); //form data를 req.body에 옮겨 담는다. json data
app.use(bodyParser.urlencoded({extended:true}));
app.use(methodOverride("_method")); //_method query로 들어오는 값으로 http method를 바꾼다.
//DB schema //db에서 사용할 schema object 생성.
var contactSchema = mongoose.Schema({
name:{type:String, required:true, unique:true}, //required:값이 반드시 입력되어야 함, unique:중복x
email:{type:String},
phone:{type:String}
});
var Contact = mongoose.model("contact", contactSchema); //model 생성
//Routes
//Home
app.get("/", function(req,res) {
res.redirect("/contacts");
});
//Contacts-Index
app.get("/contacts", function(req,res){
Contact.find({}, function(err,contacts){ //모델.find(검색조건, 콜백함수) {}=검색조건없음으로 모델의 모든데이터 리턴.
if(err) return res.json(err);
res.render("contacts/index", {contacts:contacts});
});
});
//Contacts-New
app.get("/contacts/new", function(req,res){
res.render("contacts/new");
});
//Contacts-create
app.post("/contacts", function(req,res){ //contacts/new 에서 폼을 전달받는 경우
Contact.create(req.body, function(err, contact){ //인자 첫번째로 생성할 data의 object를 받고, 두번째로 인자의 콜백함수 받음
if(err) return res.json(err);
res.redirect("/contacts");
});
});
//Contacts-Show
app.get("/contacts/:id", function(req,res){
Contact.findOne({_id:req.params.id}, function(err,contact){
if(err) return res.json(err);
res.render("contacts/show", {contact:contact});})
});
//Contacts-edit
app.get("/contacts/:id/edit", function(req,res){
Contact.findOne({_id:req.params.id}, function(err,contact){
if(err) return res.json(err); res.render("contacts/edit", {contact:contact}); })
});
//Contacts-update
app.put("/contacts/:id", function(req,res){
Contact.findOneAndUpdate({_id:req.params.id}, req.body, function(err,contact){ //해당 모델의 document를 찾아 그 data를 수정. (찾을 조건, 업데이트할정보, 콜백함수)
if(err) return res.json(err); res.redirect("/contacts/"+req.params.id); })
});
//Contacts-destroy
app.delete("/contacts/:id", function(req,res){
Contact.deleteOne({_id:req.params.id}, function(err,contact){
if(err) return res.json(err); res.redirect("/contacts"); })
});
//port setting
var port = process.env.PORT || 3000; //port값 설정되어 있지 않다면 3000사용.
app.listen(3000, function() {
console.log("server on! http://localhost:"+port);
});
템플릿 엔진 ejs 사용 (ejs는 아직 어렵다..)
<!-- views/contacts/index.ejs -->
<!DOCTYPE html>
<html>
<head>
<% include ../partials/head %>
</head>
<body>
<% include ../partials/nav %>
<div class="container contact contact-index">
<h2>Index</h2>
<ul class="list-group">
<% contacts.forEach(function(contact) { %>
<li class="list-group-item">
<a href="/contacts/<%= contact._id %>"><%= contact.name %></a>
</li>
<% }) %>
</ul>
</div>
</body>
</html>
css 추가
- 주소록 만들기 클리어!
- 새로운 인재를 영입하게 됐다. 치앙마이에 함께 갈 친구가 늘었다^^
- 응용해서 게시판만들기->에디터 연결하기->사진+제목+글 기사 형식으로 템플릿 변형하기. 이번주 목표.
'TIL' 카테고리의 다른 글
TIL D-81 Nodejs 게시판 (0) | 2019.11.08 |
---|---|
TIL D-83 MongoDB (0) | 2019.11.06 |
Mozilla - javascript first steps (0) | 2019.11.05 |
Mozilla - array (0) | 2019.11.04 |
Mozilla - useful string methods (0) | 2019.11.04 |
댓글