我有一个使用Express框架的简单NodeJS服务器。我有一些我需要服务的ReactJS页面。现在没有同构。
在投放之前,我想检查用户是否有特定的cookie,然后根据我想要创建新的cookie。
以下是我的server.js
文件的代码。
var express = require("express");
var app = express();
var Cookies = require("cookies");
app.use(function(req, res){
var cookies = new Cookies( req, res);
var userCookie = cookies.get("sso");
var isLoggedIn = cookies.get("isLoggedIn");
if(userCookie !== undefined && isLoggedIn === false){
cookies.set("isLoggedIn", true);
}
});
app.use(express.static(__dirname + '/build'));
var port = process.env.PORT || 8080;
app.listen(port, function() {
console.log("Listening on " + port);
});
所以我使用express.static
来提供build
文件夹中的静态文件。
我尝试将app.use(express.static(__dirname + '/build'));
行移到上一个app.use
之上,但代码永远不会进入Cookie部分。
我尝试过这个简单的事情。即使这样也没有用。我可以看到日志hello
,但网站没有工作。
var express = require("express");
var app = express();
app.use(function(req, res){
console.log("hello");
});
app.use(express.static(__dirname + '/build'));
var port = process.env.PORT || 8080;
app.listen(port, function() {
console.log("Listening on " + port);
});
答案 0 :(得分:2)
您使用Cookie时出现问题。您正在检查isLoggedIn
,Cookie值=== false
是否为布尔值。但Cookie始终是字符串,因此比较始终为false
,您永远不会将isLoggedIn
设置为"true"
。
如果您更新代码以将值视为字符串,则可能会有效。尝试这样的事情:
if(userCookie !== undefined && isLoggedIn !== "true"){
cookies.set("isLoggedIn", "true");
}
答案 1 :(得分:1)
正如杰里米的回答所指出的那样,我错误地使用了这些饼干。但这不是核心问题。如果代码已运行,则表达服务器会抛出错误。真正的问题是我没有在应用程序的请求 - 响应周期中调用下一个中间件。根据{{3}}
中间件是一个可以访问请求对象(req)的函数 响应对象(res),以及应用程序中的下一个中间件 请求 - 响应周期,通常由名为next的变量表示。
我没有打电话给next
。
所以更新的运行代码是:
var express = require("express");
var app = express();
var Cookies = require("cookies");
app.use(function(req, res, next){
var cookies = new Cookies( req, res);
var userCookie = cookies.get("sso");
var isLoggedIn = cookies.get("isLoggedIn");
if(userCookie !== undefined && isLoggedIn !== "true"){
cookies.set("isLoggedIn", "true",{ httpOnly: false } );
}
next();
});
app.use(express.static(__dirname + '/build'));
var port = process.env.PORT || 8142;
app.listen(port, function() {
console.log("Listening on " + port);
});