从Express中间件读取Cookie



我正在使用Express和Unblocker模块以及用于读取cookie的CookieParser制作一个应用程序。我有一个简单的系统,其中if语句读取req.cookies.visits,查看它是0还是未定义,然后重定向到密码屏幕。但是,当考虑到Unblocker模块时会出现问题。进行

app.get('/proxy', function(req, res){
if(req.cookies.visits==0||req.cookies.visits==undefined){
res.redirect("/password");
} else {
res.sendFile(__dirname + '/public/index.html');
}
});

在发出请求时不会读取cookie(因为路由是/proxy/http地址(。我尝试过使用express中间件,但执行req.cookie.visits会导致未定义的错误。Unlocker也有一个内置的中间件功能,但npm上的页面只显示了如何进行响应,而不是请求。

基本上,我如何读取每个请求的cookie并与该模块兼容?

查看中间件的完整示例:

const express = require('express')
const app = express();
const port = 3000;
var Unblocker = require('unblocker');
const cookieParser = require("cookie-parser");
app.use(cookieParser());
app.use(new Unblocker({prefix: '/proxy/'}));
function checkVisits(req,res,next){
let visits;
try {
visits = req.cookies.visits;
if(isNaN(visits)){
visits = 0;
}
console.log("visits:" + visits);
} catch {
console.log("no visits");
visits = 0;
}finally{
if(visits === 0){
res.redirect("/password");
return;
}
res.visits = parseInt(visits)+1;
res.cookie('visits',res.visits, { maxAge: 900000, httpOnly: true });
return next();
}
}
//add checkVisits(req,res,next) as a middleware
app.get('/index',checkVisits, function (req, res) {
res.send('index visits:'+res.visits);
})
//add checkVisits(req,res,next) as a middleware
app.get('/home',checkVisits, function (req, res) {
res.send('home visits:'+res.visits);
})
app.get('/password', function (req, res) {
res.send('password page');
})
app.listen(port, () => console.log("App listening on port %s!", port))

checkVisits(req,res,next(中间件将检查Visitscookie。如果访问cookie为0,则用户将重定向到路由/密码。

最新更新