繁体   English   中英

在 moongose 上找到一位用户

[英]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.

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