본문 바로가기

Full Stack 교육 회고록

11/24 node.js / kotlin

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