我有以下問題需要解決:我在一個資料庫 (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,為了獲取他的資訊,該過濾器如何在貓鼬中完成?
一個清晰的 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
uj5u.com熱心網友回復:
為什么不直接轉換用戶名并將其傳遞給查詢函式?就像是:
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) })
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/399953.html
上一篇:在貓鼬模式中定義型別
下一篇:無法填充物件陣列
