即使导出了文件并在需要时需要它,为什么我仍无法访问另一个文件中的数据?

时间:2019-09-25 03:12:36

标签: javascript node.js express

我正在尝试从routes目录中清除cookie,但是在主js文件中声明了cookie名称。我在主js文件中有所需的paths.js文件,但是每次尝试清除其显示的Cookie时,ReferenceError:SESS_NAME都未定义

主js文件

       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"));

路径js文件

    router.route("/blog").get((req, res) => {
      req.session.destroy((err) => {
        if (err) 
           console.log(err);
        else
           res.clearCookie(SESS_NAME);
      });

         });

2 个答案:

答案 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));