[英]Express importing app from server.js is giving me an error
I have created an express server in my server.js
file, and I export app
from it.我在server.js
文件中创建了一个快速服务器,并从中导出app
。
//server.js
require("dotenv").config();
const express = require("express");
const app = express();
const connectToDb = require("./connectToDb")
connectToDb().catch(console.dir)
app.use((req, res) => {
res.status(404).send("unable to find");
});
module.exports = app
I import app
from server.js
in the connectToDb.js
file我在connectToDb.js
文件中从server.js
导入app
//connectToDb.js
const app = require("./server")
const MongoClient = require("mongodb").MongoClient;
const client = new MongoClient(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const port = process.env.PORT || 3000;
const connectToDb = async () =>{
try {
await client.connect();
console.log("Connected correctly to server");
app.listen(port, () => {
console.log(`Listening on port ${port}`);
})
} catch (err) {
console.log(err.stack);
} finally {
await client.close();
console.log("hello")
}
}
module.exports = connectToDb
It connects succesfully to the database, but when it reaches app.listen
it gives me this error: TypeError: app.listen is not a function
.它成功连接到数据库,但是当它到达app.listen
时,它给了我这个错误: TypeError: app.listen is not a function
。 I don't know why it gives me an error because I have exported app
.我不知道为什么它给我一个错误,因为我已经导出了app
。 What am I doing wrong?我究竟做错了什么?
That's because you have a cyclic dependency.那是因为你有一个循环依赖。 The two files import each other, and inside server.js
you make a call immediately on load.这两个文件相互导入,在server.js
中,您在加载时立即进行调用。 In the moment you call connectToDb
inside of server.js
, the server.js
file has not fully executed yet and hence the module export has not yet happened.当您在server.js
中调用connectToDb
时, server.js
文件还没有完全执行,因此模块导出还没有发生。 Either way it's something you should try to avoid (cyclic dependencies).无论哪种方式,你都应该尽量避免(循环依赖)。
Just resolve the cycle by passing the app
to the connectToDb
function as a parameter instead of importing it:只需通过将app
传递给connectToDb
function 作为参数而不是导入它来解决循环:
//server.js
require("dotenv").config();
const express = require("express");
const app = express();
const connectToDb = require("./connectToDb")
connectToDb(app).catch(console.dir)
app.use((req, res) => {
res.status(404).send("unable to find");
});
module.exports = app
// connectToDb.js
const MongoClient = require("mongodb").MongoClient;
const client = new MongoClient(process.env.MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
});
const port = process.env.PORT || 3000;
const connectToDb = async (app) =>{
try {
await client.connect();
console.log("Connected correctly to server");
app.listen(port, () => {
console.log(`Listening on port ${port}`);
})
} catch (err) {
console.log(err.stack);
} finally {
await client.close();
console.log("hello")
}
}
module.exports = connectToDb
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.