簡體   English   中英

加載api后更改express-session變量

[英]express-session variable is changed after loading api

我是expressjs的新手,我的問題與快遞有關。

app.js在下面,在package.json中,我安裝了express和express-session。

如果我轉到'localhost:3000',在控制台中,req.session.flag值將改變如下:


一個之前:未定義
一個后:1
兩個之前:1
兩個后:2

之后,如果我轉到'localhost:3000 / three',在控制台中,req.session.flag值會改變如下:


前三:2
三后:3

如果我此時刷新'localhost:3000 / three',則req.session.flag的值將為2但不是3。


前三:2
三后:3

為什么會這樣? req.session.flag的值從前一點改為3,為什么在控制台中它從2開始?

如果我去'localhost:3000',req.session.flag的值也將從2開始,為什么會這樣呢?


一個之前:2
一個后:1
兩個之前:1
兩個后:2

謝謝!

 var express = require('express'); var session = require("express-session"); var post = require('./routes/post'); var app = express(); var port = 3000; app.use(session({secret:'fdsadfasdfdsafdsafdsafdsafd', saveUninitialized:false, resave: false})); app.get('/', function (req, res, next) { console.log("********************************"); console.log("One before: "+req.session.flag); req.session.flag = 1; console.log("One after: "+req.session.flag); next(); }, function (req, res, next) { console.log("Two before: "+req.session.flag); req.session.flag = 2; console.log("Two after: "+req.session.flag); var html="<!DOCTYPE html><html><head><title>Hello world</title></head><body ><h1>Hello world</h1></body></html>"; res.send(html); }); app.get('/three', function (req, res, next) { console.log("********************************"); console.log("Three before: "+req.session.flag); req.session.flag = 3; console.log("Three after: "+req.session.flag); }); app.listen(port); 

會話不會保存在您的/three端點中。 這是因為你沒有發回任何回復(甚至沒有回復)。

express-session文檔:

Session.save()

將會話保存回商店,用內存中的內容替換商店中的內容(盡管商店可能會做其他事情 - 請參閱商店的文檔以了解確切的行為)。

如果會話數據已被更改,則會在HTTP響應結束時自動調用此方法(盡管可以使用中間件構造函數中的各種選項更改此行為)。 因此,通常不需要調用此方法。

在某些情況下,調用此方法很有用,例如,長期請求或WebSockets。

由於您不調用res.send (或簡稱res.end ),請求最終會超時,並且不會保存會話。

由於JavaScript具有回調的異步性質,express不能只發送默認響應。 您必須始終手動發送一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM