簡體   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