ExpressJS требует файл, который имеет объект маршрута из двух разных мест не работает - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над проектом expressJS.У меня есть файл маршрута с именем send_email.js, и я хочу использовать части этого файла из двух разных мест.Эти места index.js и user.js.Поэтому я добавил следующую строку для index.js и users.js:

const send_email = require("./send_mail");

Но user.js выдает ошибку, поскольку send_email не определено.А потом я просто удаляю ту же строку из index.js и все идет хорошо.Я могу связаться с send_mail в user.js, и это то, чего я ожидаю.

Я что-то упускаю из виду, требуя файлы в expressJS?Я могу эффективно использовать эту технику в других проектах.Существуют ли какие-либо специфичные для expressJS вещи, которые вызывают эту ошибку?

Я создал такую ​​же ситуацию в другом крошечном проекте и его кодах:


// ------------------------ index.js -----------------------

const express = require("express");
const app = express();

/* if coment this two line every thing goes fine */
const mylog = require("./deneme1").mylog;
mylog();
/* if coment this two line every thing goes fine */


const yourlog = require("./deneme2").yourlog;
const route = require("./deneme1").route;
console.log('route :', route);


yourlog();

app.get("/", (req, res)=>{
  res.send("OK!");
})


app.listen(3000, () => { "listening on "+3000});

// -------------- deneme1.js -------------------------

const express = require("express");
const route = express.Router();
const yourlog = require("./deneme2").yourlog;
console.log('yourlog mmm:', yourlog);

route.get("/deneme", function(req, res){
  mylog();
  res.send("OK!");
});

function mylog () {
  console.log("mylog in deneme1.js");
};

module.exports.route = route;
module.exports.mylog = mylog;

// ------------------ deneme2.js -----------------

const express = require("express");
const route = express.Router();

const mylog = require("./deneme1").mylog;
console.log('mylogxx :', mylog);

function yourlog(){
  console.log("yourlog deneme2");
  mylog();
  console.log("----");
}

module.exports.yourlog = yourlog;

deneme1.js и deneme2.js требуют друг друга и express.js требуют оба значения deneme1.js и deneme2.js.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я понял, что моя проблема связана с "циклическими зависимостями" между моими файлами маршрутов.Это своего рода ошибка дизайна.И есть вопрос / решение по поводу переполнения стека: как справиться с циклическими зависимостями в узле js

0 голосов
/ 01 марта 2019

Вы экспортировали в файл send_mail.js?Вы должны экспортировать любую функцию, которую хотите использовать повторно.И используйте импорт там, где вам это нужно.Вместо того, чтобы требовать.Для справки: MDN

...