繁体   English   中英

每当在我的 Node.js API 中发出 GET 请求时,我如何发送随机集合?

[英]How can i send a random collection whenever a GET request made in my Node.js API?

我目前正在开发一个打字应用程序,它有一个 API,它将发送这样的随机引号https://api.quotable.io/random我通过 mongodb nodejs 编写了一个 API 并表达了它的工作原理,但我想发送一个每当用户向 /random 发出 GET 请求时,从数据库中随机收集我尝试过 mongoose-random 包,但它只是返回一个空数组,我该如何修复它。


const express = require('express')
var mongoose = require('mongoose');
var random = require('mongoose-random');

const router = express.Router()
const lesson = require('../models/subscriber')
// Get all subscribers
router.get('/', async (req, res) => {
  try {
    const subscribers = await lesson.find()
    res.json(subscribers)
  } catch (err) {
    res.status(500).json({ message: err.message })
  }
})
lesson.findRandom().limit(10).exec(function (err, iterat) {
    console.log(iterat);
});


// Get one subscriber
router.post('/', async (req, res) => {
  const subscriber = new lesson({
    content: req.body.content,
    subject: req.body.subject
  })

  try {
    const newSubscriber = await subscriber.save()
    res.status(201).json(newSubscriber)
  } catch (err) {
    res.status(400).json({ message: err.message })
  }
})

async function getSubscriber(req, res, next) {
  try {
    subscriber = await lesson.findById(req.params.id)
    if (subscriber == null) {
      return res.status(404).json({ message: 'Cant find subscriber'})
    }
  } catch(err){
    return res.status(500).json({ message: err.message })
  }

  res.subscriber = subscriber
  next()
}
// Update one subscriber
router.patch('/:id', getSubscriber, async (req, res) => {
  if (req.body.name != null) {
    res.subscriber.content = req.body.content
  }

  if (req.body.subject != null) {
    res.subscriber.subject = req.body.subject
  }
  try {
    const updatedSubscriber = await res.subscriber.save()
    res.json(updatedSubscriber)
  } catch {
    res.status(400).json({ message: err.message })
  }

})
router.get('/:id', getSubscriber, (req, res) => {
    res.json(res.subscriber)
})

// Delete one subscriber
router.delete('/:id', getSubscriber, async (req, res) => {
  try {
    await res.subscriber.remove()
    res.json({ message: 'Deleted This Subscriber' })
  } catch(err) {
    res.status(500).json({ message: err.message })
  }
})


module.exports = router
const mongoose = require('mongoose')
var random = require('mongoose-random');
const subscriberSchema = new mongoose.Schema({
  content: {
    type: String,
    required: true
  },
  subject: {
    type: String,
    required: true
  }
})

subscriberSchema.plugin(random,{path:'r'});
mongoose.set('useCreateIndex', true);
module.exports = mongoose.model('Subscriber', subscriberSchema)

const mongoose = require('mongoose')
var random = require('mongoose-random');
const subscriberSchema = new mongoose.Schema({
  content: {
    type: String,
    required: true
  },
  subject: {
    type: String,
    required: true
  }
})

subscriberSchema.plugin(random,{path:'r'});
mongoose.set('useCreateIndex', true);
module.exports = mongoose.model('Subscriber', subscriberSchema)

如果您从集合中获取单个文档,则可以执行此操作。

    const count = await Quote.estimatedDocumentCount();
    const random = Math.floor(Math.random() * count);
    Quote.findOne()
      .skip(random)
      .then((quote) => {
        return res.status(200).json({
          statusCode: 200,
          quote: quote,
        });
      });

供你参考

https://github.com/pprathameshmore/QuoteGarden/blob/3ca9cf657e76871c4d9a8aa4a5bd20fca78ff1f8/api/controllers/quotesV2.js#L7

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM