728x90
SMALL
session
<Ex09cookiesession/routes/session.js>
const express = require("express");
const router = express.Router();
//세션 생성하기
router.get("/setsession", (req, res) => {
req.session.nickname = "닉네임";
req.session.today = "today";
res.send("세션생성");
});
//세션에 저장된 값을 응답하기
router.get("/getsession", (req, res) => {
res.send("닉네임: " + req.session.nickname);
});
router.get("/deletesession", (req, res) => {
req.session.destroy(); //전체 삭제
// req.session.today=''; 하나만 삭제
res.send("세션삭제");
});
module.exports = router;
<Ex09cookiesession/app.js>
const express = require("express");
const app = express();
const cookieRouter = require("./routes/cookie");
const sessionRouter = require("./routes/session");
const cookieParser = require("cookie-parser");
const session = require("express-session");
const fileStore = require("session-file-store")(session);
app.set("port", process.env.PORT || 8888);
app.use(cookieParser()); //쿠키값 확인 시 필요
app.use(
session({
httpOnly: true, //http 요청으로 온것만 처리
resave: false, //세션을 언제나 저장할지 설정
secret: "secret key", //암호화 하는데 쓰일 키
store: new fileStore(), //여러 사용자의 세션을 저장하기 위한 저장소
})
);
app.use("/c", cookieRouter);
app.use("/s", sessionRouter);
app.listen(app.get("port"), () => {
console.log(app.get("port"), "번 포트에서 서버 연결 대기중...");
});
session 파일이 생성된다.
<Ex10database>
[config/database.js]
const mysql = require("mysql2");
const db_info = {
host: "localhost",
port: "3306",
user: "test",
password: "1234",
database: "testdb",
};
module.exports = {
init: function () {
//초기화
return mysql.createConnection(db_info);
},
connect: function (conn) {
conn.connect(function (err) {
if (err) {
console.error("mysql 연결 오류 : " + err);
} else {
console.log("mysql 연결 성공!");
}
});
},
};
[routes/index.js]
const express = require("express");
const router = express.Router();
const db_config = require("../config/database");
let conn = db_config.init();
db_config.connect(conn);
router.get("/select", (req, res) => {
res.render("index");
});
router.post("/insert", (req, res) => {
let { id, pw, nick } = req.body;
let sql = "insert into member values(?,?,?)";
conn.query(sql, [id, pw, nick], function (err, rows, fields) {
console.log(rows);
console.log(fields);
res.send("insert 완료");
});
});
module.exports = router;
[views/index.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.0" />
<title>Document</title>
</head>
<body>
<table border="1">
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>닉네임</th>
</tr>
<tr>
{%for item in list%}
<td class="id">{{item.id}}</td>
<td class="pw">{{item.pw}}</td>
<td class="nick">{{item.nick}}</td>
</tr>
{%endfor%}
</table>
<h3>특정회원정보 조회</h3>
<table border="1">
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>닉네임</th>
</tr>
<tr>
<td id="searchId"></td>
<td id="searchPw"></td>
<td id="searchNick"></td>
</tr>
</table>
<h3>회원 추가</h3>
<form action="insert" method="post">
ID : <input type="text" name="id" /><br />
PW : <input type="text" name="pw" /><br />
NICK : <input type="text" name="nick" /><br />
<input type="submit" value="INSERT" />
</form>
<h3>회원 정보 수정</h3>
<form action="" method="">
ID : <input type="text" name="id" id="updateId" readonly /><br />
PW : <input type="text" name="pw" id="updatePw" /><br />
NICK : <input type="text" name="nick" id="updateNick" /><br />
<input type="submit" value="UPDATE" />
</form>
</body>
</html>
[Ex10database/app.js]
const express = require("express");
const nunjucks = require("nunjucks");
const indexRouter = require("./routes");
const bodyParser = require("body-parser");
const app = express();
app.set("port", process.env.PORT || 8888);
app.set("view engine", "html");
app.use(bodyParser.urlencoded({ extended: true }));
app.use("/", indexRouter);
nunjucks.configure("views", {
express: app,
watch: true,
});
app.listen(app.get("port"), () => {
console.log(app.get("port"), "번 포트에서 서버 연결 대기중...");
});
<오후 안드로이드 스튜디오>
Constraint Layout: View들을 서로 겹쳐서 배치 할 수 있다!
LinearLayout: 선형(vertical, horizontal)
inset: 뷰가가진 크기(테두리)안쪽에 여백
padding
2. id 속성
xml에 있는 view를 클래스에서 컨트롤해야되는데 view를 kotlin으로 컨트롤할려면 구분할 수 있는 값이 필요함(id: 고유값)
// : kotlin에서 상속
class ConstraintActivity : AppCompatActivity() {
//OnCreate()는 Activity가 실행될때 최초 딱 한번?(가장 먼저) 호출되는 메서드
// : Activity 생명주기
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ***** xml이랑 ktClass랑 연결하는 코드 없으면 화면 안뜸 *****
setContentView(R.layout.activity_constraint)
// 1. xml의 View에 id를 지정
// 2. id값을 이용해서 view를 찾아온다 (findViewById)
val tvResult = findViewById<TextView>(R.id.tvResult)
// id 값은 문자열로 정해줬는데 받아오는 값이 Int
// R 폴더에 모든 뷰(리소스)들의 id 값이 저장이 되는데 주소값이 저장
// 16진수 상수형태로 저장이 되어있다(Int)
}
}
728x90
LIST
'Full Stack 교육 회고록' 카테고리의 다른 글
2022.11.28- 안드로이드 스튜디오 (0) | 2022.11.28 |
---|---|
11/25- 안드로이드스튜디오(계산기, 로그인) / Node.js(Sequelize) (0) | 2022.11.25 |
11/23 - kotlin, 안드로이드 스튜디오, node.js (0) | 2022.11.23 |
11/22- kotlin / Node.js (0) | 2022.11.22 |
11/21- node.js / 오후 Kotlin (0) | 2022.11.21 |