Почему я не могу получить доступ к данным из другого файла, даже если он экспортирован и требуется там, где это необходимо? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь удалить cookie из каталога маршрутов, но имя файла cookie объявлено в основном файле js.У меня есть файл paths.js, необходимый в основном файле 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"));

Paths js file

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

         });

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Если в файле main.js требуется paths.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));
0 голосов
/ 25 сентября 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...