我正在使用express和mongoose构建用于中间层服务的graphql服务器,并且具有类似这样的项目结构,
-models
---user.js
---messages.js
---index.js
-resolvers/
-schema/
-index.js
以index.js为切入点。我正在尝试将模块从src / models / index.js导出到src / models / user.js和src / models / messages.js。
我当前正在从src / models / index.js导出一个函数以连接到数据库到src / index.js,这很好用。但是,如果尝试在同一目录(“ models”文件夹)中导入相同的导出文件,则会导致该模块无法访问。
貌似将语法更改为
export function getDatabaseConnections (dbName) {
...
}
可以在src / models / user.js内部获得识别的功能,但是无论导出语法如何,connections变量在文件内部仍然是未定义的。
src / models / index.js
var connections = {};
const connectToDB = () => {
return mongoose.connect(mongo_uri, { useNewUrlParser: true});
};
const getDatabaseConnections = (dbName) => {
if(connections[dbName]) {
return connections[dbName];
} else {
// if the connection object doesn't already exist, create and return
connections[dbName] = mongoose.createConnection(mongo_uri, { useNewUrlParser: true });
return connections[dbName];
}
};
const models = { User, Message };
export { connectToDB, getDatabaseConnections, connections };
export default models;
有效地导入src / index.js。
import models, { connectToDB, getDatabaseConnections, connections } from './models';
connectToDB(); // this functions properly
console.log(connections) // functions
getDatabaseConnections('dbName') // functions
在src / models / user.js内
import { connectToDB, getDatabaseConnections, connections } from './index';
connectToDB(); // fails
console.log(connections) // fails
getDatabaseConnections('dbName') // fails
在src / models / message.js内,我收到TypeError:(0,_index.getDatabaseConnections)不是一个函数,但是我希望导入能够像在应用程序的入口处一样正常工作。
答案 0 :(得分:0)
这是由于对进口商品的循环依赖。 Models / index.js是从models / user.js导入的,但是我试图在user.js内使用index模块。无法保证模块的解析顺序,因此在user.js中显示为空。