【发布时间】:2021-02-17 16:30:39
【问题描述】:
我正在创建一个 MERN 杂志 Web 应用程序,该应用程序向用户显示存储在 mongodb 中的文章。我有多个数据库,在 Mongo Atlas 上称为 userDB 和 articleDB。这些数据库位于单个集群中。问题是,在我的一个控制器 articleController.js 中,集合上的 find 方法总是返回一个空数组。这导致我的应用程序崩溃,因为它始终可以工作并且没有返回一个空数组,而是返回一个包含三个最新文章对象的数组,然后我开始将我的数据从本地 mongodb 转换到 Atlas。
这是我文章Controllers.js的一段代码sn-p:
const express = require('express');
const app = express();
const cors = require("cors");
let articleSchema = require('../models/article.model');
const mongoose = require("mongoose");
const conn = mongoose.createConnection("mongodb+srv://<username>:<password>@cluster0.c94ps.mongodb.net/articleDB?retryWrites=true&w=majority", { useNewUrlParser: true, useUnifiedTopology: true, dbName: "articleDB" });
const Article = conn.model('article', articleSchema); // update: this is where the problem was.
const fs = require("fs");
const path = require("path");
app.use(cors({
origin: 'http://localhost:3000',
credentials: true
}));
app.use('/images', express.static(path.join(__dirname, '/images')));
exports.article_home_section_display_get = (req, res) => {
const id = req.params.id;
const firstLetter = id.charAt(0).toUpperCase();
const restOfWord = id.substring(1, id.length);
const fullWord = firstLetter + restOfWord;
Article.find({article_section: fullWord}).sort({article_date: -1}).limit(3)
.then(articles => {
console.log(articles); //empty array
console.log(`Found and sent over three of the latest ${fullWord} articles.`);
res.send(articles);
})
.catch(err => {
console.log(err);
});
};
其中尖括号中的 username 和 password 是我的实际用户名和密码。
会不会是在连接多个数据库时使用 mongoose.createConnection 连接到 mongo Atlas 实际上是不可能的?或者,我的应用程序根本没有连接到 Atlas,因为我忽略了某种错误?对了,Atlas上的数据库叫做articleDB,里面的集合是article。
我已经为此苦苦挣扎了很长时间,当我做别人做的事情时,我无法弄清楚哪里出了问题。因此,任何帮助将不胜感激。
【问题讨论】:
标签: node.js mongodb express mongoose mongodb-atlas