【发布时间】:2019-11-28 16:44:56
【问题描述】:
我正在从事一个相对较大的项目,该项目有很多服务和查询数据库。在大多数服务中,都有过滤结果或搜索的功能strong> 在文档或分页中。
我想知道如何拥有一个函数或模块来处理所有服务中的所有搜索,而不必在所有服务中编写相同(有点相同)的代码。
例如,我有一个返回流行歌曲的功能:
module.exports.get_trending_songs = async (req, res, next) => {
var searchParams = {}
var sortParams = {}
if (req.query.search) {
searchParams = {
name: new RegExp('.*' + req.query.search + '.*', "i")
}
}
if (req.query.sort) {
sortParams = (req.query.order == 1 ? '' : '-') + req.query.sort
}
var songs
songs = await Song.find(searchParams)
.limit(parseInt(req.query.limit))
.skip(parseInt(req.query.skip))
.sort(sortParams)
.exec()
}
我有一个返回用户的函数:
module.exports.get_users = async (req, res) => {
var searchParams = {}
var sortParams = {}
if (req.query.search != undefined) {
searchParams = {
name: new RegExp('.*' + req.query.search + '.*', "i")
}
}
if (req.query.sort != undefined) {
sortParams = (req.query.order == 1 ? '' : '-') + req.query.sort
}
var users = await User.find(searchParams)
.select('-password')
.limit(parseInt(req.query.limit))
.skip(parseInt(req.query.skip))
.sort(sortParams)
.exec()
}
如您所见,它们几乎相同! (假设我通过执行相同的查询并添加.count() 来返回分页内容(如nPages 或countOfDocs)
在其他模块中处理所有副查询(分页、搜索等)并使服务只关注主查询的最佳方式是什么?不是
【问题讨论】:
标签: node.js mongodb rest mongoose