简体   繁体   English

从 server.js 快速导入应用程序给我一个错误

[英]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.

相关问题 将Express API数据库与server.js文件分开 - Separate express api database from server.js file 错误 [ERR_MODULE_NOT_FOUND]:找不到从 build\\server.js 导入的模块“build\\app” - Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'build\app' imported from build\server.js 在server.js文件外部进行快速路由 - Express routing outside of server.js file 在 Express 中拒绝访问 server.js - Denying access to server.js in Express 我正在尝试从 mongodb 连接我的 server.js express api 但它显示一些错误我不明白 - I am trying to connect my server.js express api from mongodb but it showing some error i don't understand it Express: new Error() 在 server.js/index.js 之外不起作用 - Express: new Error() is not working outside of server.js/index.js 如何将代码从server.js中抽象到Express应用程序的子目录中? - How can I abstract code out of server.js into subdirectories in my Express app? 每次在server.js上听到路径时都会执行app.use表达 - Does express app.use execute every time a path is heard on server.js 如何在快速后端server.js文件中设置一些值并在create-react-app代码中使用它? - How to set some value in express backend server.js file and use it in create-react-app code? 使用Angular 1.5.6在Express Server.js中不断出现Uncaught Syntax错误 - Keep getting Uncaught Syntax error in my Express server.js with Angular 1.5.6
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM