[英]Find one user on moongose
我有以下问题要解决:我在一个数据库(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
为什么不直接转换用户名并将其传递给查询 function? 就像是:
const convertUsername = username => { const nameParts = username.split('-'); return nameParts.map(n => n.slice(0, 1).toUpperCase() + n.slice(1)).join(' '); }; console.log(convertUsername('dubá-Solis')); console.log(convertUsername('joan-of-arc'));
然后,只需执行User.findOne({ name: convertUsername(req.params.username) })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.