【发布时间】:2021-11-07 12:47:15
【问题描述】:
我是 MongoDB 的新手,目前正在关注 a blog tutorial,它教我如何使用 MERN 堆栈构建网站。
问题
问题出在后端,尤其是从后端检索文档。我自己(通过网站)将文档插入数据库进行测试。它位于一个名为“Articles”的集合中:
_id:613c75edd38cd146c0b8a1df
title:"An experimental evaluation of test driven development vs. test-last de..."
authors:"Munir, H., Wnuk, K., Petersen, K., Moayyed, M."
source:"EASE"
pubyear:"2014"
doi:"https://doi.org/10.1145/2601248.2601267"
claim:"code quality improvement"
evidence: "strong support"
我的文件
以下是文章数据库模型:
const mongoose = require('mongoose')
const ArticleSchema = new mongoose.Schema({
id: {
type: Number
},
title: {
type: String,
required: true
},
authors: {
type: String,
required: true
},
source: {
type: String,
required: true
},
pubyear: {
type: String,
required: true
},
doi: {
type: String,
required: true
},
claim: {
type: String,
required: true
},
evidence: {
type: String,
required: true
}
});
module.exports = Articles = mongoose.model('Articles', ArticleSchema);
路线如下:
// routes/api/articles.js
const express = require('express');
const router = express.Router();
// Load Articles model
const Articles = require('../../models/Articles');
console.log(Articles);
// @route GET api/articles/test
// @description tests articles route
// @access Public
router.get('/test', (req, res) => res.send('articles route testing!'));
// @route GET api/articles
// @description Get all articles
// @access Public
router.get('/', (req, res) => {
Articles.find()
.then(articles => res.json(articles))
.catch(err => res.status(404).json({ noarticlesfound: 'No articles found' }));
});
// @route GET api/articles/:id
// @description Get single articles by id
// @access Public
router.get('/:id', (req, res) => {
Articles.findById(req.params.id)
.then(article => res.json(article))
.catch(err => res.status(404).json({ noarticlefound: 'No article found' }));
});
// @route GET api/articles
// @description add/save articles
// @access Public
router.post('/', (req, res) => {
Articles.create(req.body)
.then(article => res.json({ msg: 'Article added successfully' }))
.catch(err => res.status(400).json({ error: 'Unable to add this article' }));
});
// @route GET api/article/:id
// @description Update article
// @access Public
router.put('/:id', (req, res) => {
Articles.findByIdAndUpdate(req.params.id, req.body)
.then(article => res.json({ msg: 'Updated successfully' }))
.catch(err =>
res.status(400).json({ error: 'Unable to update the Database' })
);
});
// @route GET api/article/:id
// @description Delete article by id
// @access Public
router.delete('/:id', (req, res) => {
Articles.findByIdAndRemove(req.params.id, req.body)
.then(article => res.json({ mgs: 'Article entry deleted successfully' }))
.catch(err => res.status(404).json({ error: 'No such a article' }));
});
module.exports = router;
后端完美运行。当我去测试路线时,它会返回预期的字符串。但它似乎在检索任何内容时总是返回一个空集合 ([])。
我的 app.js 文件:
// app.js
const express = require('express');
const connectDB = require('./config/db');
var cors = require('cors');
// routes
const articles = require('./routes/api/articles');
const app = express();
// Connect Database
connectDB();
// cors
app.use(cors({ origin: true, credentials: true }));
// Init Middleware
app.use(express.json({ extended: false }));
app.get('/', (req, res) => res.send('Hello world!'));
// use Routes
app.use('/api/articles', articles);
const port = process.env.PORT || 8085;
app.listen(port, () => console.log(`Server running on port ${port}`));
我的尝试
我在 Stack Overflow 上看到的大多数问题似乎都与 db.collection.find 类似,但在本教程中它并没有说明如何检索这样的数据,因此我无法尝试大多数修复.
我确实在 Articles 集合中注意到 id 实际上是 _id,所以我对文章的数据库模型进行了更改,但没有任何变化。
【问题讨论】: