首页 > 解决方案 > 为什么模块大部分时间都返回一个空白对象?

问题描述

我试图弄清楚为什么我的模块没有正确加载。这是一个猫鼬模型,但即使只返回一个字符串,有时也会返回空对象,所以它似乎与节点有关。

文章/模型/articles.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var articleSchema = new Schema({
    title: String,
    slug: String,
    author: { type: mongoose.Schema.ObjectId, required: true},
    likes: {type: Number, default: 0},
    comments: {type: Number, default: 0},
    outro: String,
    metadescription: String,
    metaimage: String,
},{timestamps: true});

//queries
articleSchema.statics.new = require('../queries/new.js');
articleSchema.statics.get = require('../queries/get.js');
articleSchema.statics.single = require('../queries/single.js');
articleSchema.statics.update = require('../queries/update.js');
articleSchema.statics.delete = require('../queries/delete.js');
//articleSchema.statics.updateCommentCount = require('../queries/updateCommentCount.js');

var model = mongoose.model('articles', articleSchema);

//save to exports
module.exports = 'hi';

在这里我尝试称它为:

var Articles = require('../../articles/models/articles.js');
console.log('a',require('../../articles/models/articles.js'));
console.log('b',Articles);

setTimeout(()=>{
    console.log('c',require('../../articles/models/articles.js'));
    console.log('d',Articles);
},1000);

但这就是它的输出:

a: {}
b: {}
c: hi
d: {}

为什么会这样?空物体从何而来?它显然找到了正确的文件,因为没有错误。

如果我将 module.exports = 'hi' 移动到 article.js 的顶部,那么我会得到 a、b、c 和 d 的正确“hi”。但我试图让它返回在该文档中创建的模型对象。

我无法弄清楚问题出在哪里。

编辑:这似乎是一个循环依赖问题。Articles 和 Comments 模型都具有相互引用的功能,因为它们都需要。我不明白为什么他们不能,或者如何避免(仍然保持我的代码干净)。

标签: node.jsmongooserequiremongoose-models

解决方案


推荐阅读