javascript - 每当在我的 Node.js API 中发出 GET 请求时,我如何发送随机集合?
问题描述
我目前正在开发一个打字应用程序,该应用程序具有一个 API,它将发送像这样的随机引号https://api.quotable.io/random我通过 mongodb nodejs 和 express 编写了一个 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,
});
});
供你参考
推荐阅读
- angular8 - 未捕获的错误:无法绑定到“FormGroup”,因为它不是“form”的已知属性
- javascript - Node.js 中的“非池化”缓冲区是什么?
- visual-studio-2017 - Visual Studio Azure 功能解决方案中存在 XML 文件未发布到 Azure
- azure-logic-apps - 读取 XML 文件并通过 Azure 逻辑应用获取具有相应值的标签
- r - 如何从R中的时间元素获取日期?
- mysql - ProxySQL 主备设置
- python-2.7 - Seaborn KDE 可视化,数据集上的值错误
- javascript - 使用 JavaScript 和 NodeJS 从前端添加到收藏夹
- javascript - 如何突出显示 Highcharts 固定宽度容器中的每个数据点?
- python - 如何转换 HTML 链接中包含的 Unicode?