【问题标题】:collection.find({}) doesnt work after many tries多次尝试后,collection.find({}) 不起作用
【发布时间】:2021-08-03 12:38:29
【问题描述】:

我正在使用 express 和 mongoose 构建一个 api,并且我正在使用db.collection(collection).find({}) 期望我能从教程中看到我的所有文档(总共 3 个测试文档)。当我从邮递员执行请求时,它没有给我任何错误,这让我感到困惑,因为我什么也没得到,甚至没有空对象或数组作为响应。我尝试了不同的示例,来自不同的教程,但没有任何效果。语法错了吗?

import express from 'express'
import './connection.js'
const router = express.Router
const db = mongoose.connection;
const dtb = db.useDb('main').collection('products')

router.get('/true', async(req, res) => {
    try {
            const products = await dtb.find({})
            res.send(products).status(200)
        

    } catch (err) {
        console.log(err)
        res.sendStatus(500)
    }
})

【问题讨论】:

  • 连接在哪里?你连接到 mongo 了吗?
  • 是的,我只是在另一个文件上,我没有链接到我显示的代码上
  • 您是否收到来自邮递员 API 的响应?如果是这样,什么状态码?或者它只是永远挂起而没有得到回应。
  • @Matt 是的,我得到了 200 的资源,但没有内容。我查了一下,文档在那里,所以并不是没有数据可以收集
  • 要将您的问题标记为已解决,请单击已解决的答案下方的复选标记按钮。 ??????

标签: javascript node.js mongodb express mongoose


【解决方案1】:

因此,在一次又一次地查看我的代码后,我意识到路由 /true 被 express 用作参数,因为我有另一条路由 app.get('/:_id', getItem)。 在将路由更改为/all/true 并将文档解析为数组并经过一些调试后,我的 getAll 函数看起来像这样,终于可以工作了:

export const getAll = app.get('/all/true', async(req, res) => {

    const products = await dtb.find({}).toArray().catch(console.error())

    res.send(products)


})

【讨论】:

  • 或者,如果您将这条路线移动到 带有参数的路线之前,它将由这条路线而不是参数路线处理,同时仍然让其他路线请求到达 param'd 路由。 (但是,无论如何,让路线不交叉可能更好)
猜你喜欢
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多