Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@bonkoturyu

Node.js + Express + express-session でセッション変数を使ってみる

More than 1 year has passed since last update.

Express + express-session でセッション変数を試す

事前準備として、フォルダ作ったりパッケージインストールしたりする

mkdir exps_test
cd exps_test
npm install --save express \
                   express-session \
                   body-parser \
                   ejs

http で確認したいので、 index.ejs を作っておく

index.ejs は view として作るので、views フォルダを作っておく

views フォルダ内に index.ejs を作る

mkdir views
cd views
nano index.ejs

index.ejs の内容はコレ

index.ejs
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <p><%=message %></p>
    <form action="/" method="post">
        <input type="text" name="message">
        <button type="submit" name="button">send</button>
    </form>
    <a href="/">LastUpdateData</a>
</body>
</html>

exps_test フォルダに戻って、nodeで起動するための index.js を作る

cd ../
nano index.js

index.js の内容はコレ

index.js
const express = require('express');
const ejs = require('ejs');
const bodyParser = require("body-parser");
const session = require("express-session");
const app = express();

app.set('ejs', ejs.renderFile);

app.use(bodyParser.urlencoded({ extended: false }));

app.use(session({
    secret: "secret",
    resave: false,
    saveUninitialized: true,
}));

app.get('/', (req, res) => {
    let message = 'no message';
    if (req.session.message != undefined) {
        message = "LastUpdateData:" + req.session.message;
    }
    res.render('index.ejs', {
        message: message
    });
});

app.post("/", (req, res) => {
    let message = req.body.message;
    req.session.message = message;
    res.render('index.ejs', {
        message: message
    });
});

app.listen(3000, () => {
    console.log('Example app listening on port 3000!');
});

node.js で index.js を起動する

$ node index.js
Example app listening on port 3000!

ブラウザでアクセスする

↓こんな感じになるはず
image.png

何かしらメッセージを入力してSendすると、no message の所が変わります。
LastUpdateData をクリックすると、最後に入力した内容が表示されます。
ブラウザを閉じるとデータが消えるので no message に戻るはず。
node を再起動してもデータが消えるので no message に戻ります。

session 設定しているとこに cookie の設定を足すと、データの有効期限が付けられたりします。
↓こんな感じにすると5秒後に LastUpdateData をクリックした場合、 no message に戻ってます。

app.use(session({
    secret: "secret",
    resave: false,
    saveUninitialized: true,
    cookie: { maxAge: 5 * 1000 }
}));

参考

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
bonkoturyu
仕事と趣味で、Windowsプログラミングしてるオジサン。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?