我正在开发一个expressJS项目。我有一个名为send_email.js
的路径文件,我想从两个不同的地方使用这个文件的一部分。这些地方是index.js
和user.js
。所以我为index.js
和users.js
添加了以下行:
const send_email = require("./send_mail");
但user.js
给我一个错误,因为send_email
未定义。然后我只是从index.js
删除相同的行,一切都很顺利。我可以在user.js中访问send_mail,这是我的期望。
我是否忽略了在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});
// -------------- experiment1.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;
// ------------------ experiment2.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
。
你在send_mail.js
文件中导出了吗?您应该导出要重用的任何功能。并在任何需要的地方使用import。而不是要求。供参考:MDN
我意识到我的问题与我的路径文件之间的“循环依赖”有关。这是一种设计错误。并且有一个关于它的stackoverflow问题/解决方案:how-to-deal-with-cyclic-dependencies-in-node-js