【发布时间】:2021-12-31 15:23:07
【问题描述】:
我有以下问题要解决:我在一个数据库 (mongoDB) 中有多个用户。在特定的 url 中传递以下内容,例如:"my-page/users/here-goes-the-name-of-the-user"。 在 url 中显示用户名时,我将其转换为小写并用连字符替换空格:Husdady Mena ===> /husdady-mena。
在数据库中,用户名转换为小写前的用户名如:Husdady Mena、Donald Trump、Will Smith等
我需要以某种方式过滤一个用户,该用户在 url 中作为 /husdady-mena 与数据库用户:Husdady Mena,为了获取他的信息,如何在 mongoose 中完成该过滤?
一个清晰的js例子:
const users = [{ name: 'Husdady Mena' }, {name:'Donald Trump'}, {name:'Will Smith'}, {name:'Dubá Solis'}]
const username = "dubá-solis"
const url = `my-page.com/users/${username}`
const userToFilter = url.substring(url.lastIndexOf("/") + 1)
const userFound = users.find(({ name }) => {
const usernameToLowerCase = name.toLowerCase().replace(/\s/gim, "-")
return userToFilter === usernameToLowerCase
})
console.log(userFound)
如果你不清楚这个例子:我从前端向后端发出请求获取特定用户,我需要通过名称获取用户,不需要通过id获取。在 url 中类似于:my-page/users/dubá-solis 被绘制,我得到用户的名称,即:dubá-solis。在后端是这样的:
// Librarys
const { Router } = require('express')
const router = Router()
// Models
const User = require('@models/users/User')
router.get(
'/users/:username',
function(req, res) {
try {
// req.params.username === "dubá-solis"
const userFound = await User.findOne({ name: req.params.username })
// In database, the username is Dubá Solis, that's why it returns me null
return res.status(200).json(userFound)
} catch(err) {
console.log('[UserFound.err]', err)
}
}
)
module.exports = router
【问题讨论】: