我正在尝试从routes目录中清除cookie,但是在主js文件中声明了cookie名称。我在主js文件中有所需的paths.js文件,但是每次尝试清除其显示的Cookie时,ReferenceError:SESS_NAME都未定义
app.use(session({
name: SESS_NAME,
resave: false,
saveUninitialized: false,
secret: SESS_SECRET,
}),
cookie: {
maxAge: SESS_LIFETIME,
sameSite: true,
secure: IN_PROD
}
}));
app.use("/", require("./routes/paths"));
router.route("/blog").get((req, res) => {
req.session.destroy((err) => {
if (err)
console.log(err);
else
res.clearCookie(SESS_NAME);
});
});
答案 0 :(得分:0)
SESS_NAME,SESS_LIFETIME和IN_PROD是在某处声明的常量。确保将它们导入Main.js文件或在Main.js文件中声明
由于这些是常量,因此建议将它们移到constants.js文件中,并根据需要在Main.js和Paths.js中导入
constants.js
module.exports = Object.freeze({
MY_CONSTANT: 'some value',
ANOTHER_CONSTANT: 'another value'
});
在Main.js和Path.js中
var constants = require("./constants");
console.log(constants.MY_CONSTANT);
答案 1 :(得分:0)
如果main.js中需要path.js,为什么会收到此错误? (根据您的评论)
这是因为在模块执行之前,它会被节点包装在函数中。
所以您的代码基本上会被翻译成这个
(function(exports, require, module, __filename, __dirname) {
// your main.js
});
因此现在很明显,您在其中定义的所有变量只能由main.js文件访问。
解决方案1- 将所有常量放在单独的文件中,然后在需要时将其导入。
解决方案2-
// paths.js
const express = require('express')
const router = express.Router();
module.exports = (SESS_NAME)=>{
router.route("/blog").get((req, res) => {
req.session.destroy((err) => {
if (err)
console.log(err);
else
res.clearCookie(SESS_NAME);
});
});
return router;
}
// main.js
app.use("/", require("./routes/paths")(SESS_NAME));