我的問題是,這是從資料庫中過濾和獲取特定資料的好方法,還是會在將來對我的資料庫施加壓力,并會進行所有查詢。我使用它來向用戶建議基于他的關鍵字而不是一個直接的 API 回應的獲取串列。順便使用 react 。
const [data,setData] = useState([]);
const [keyword,setKeyword] = useState('');
useEffect(() => {
const fetchData = async keyword => {
let filteredUsers;
try {
const res = await axios.get('/api/users');
filteredUsers= res.data.filter(user=>
user.username.toLowerCase().includes(keyword)
);
setData(filteredUsers);
} catch (error) {
console.error(error);
}
setLoadingdata(false);
};
keyword.length > 1 && fetchData(keyword);
}, [keyword]);
后端:
router.get('/', async (req, res) => {
try {
const users = await User.find();
res.json(users);
} catch (error) {
console.log(error.message);
res.status(500).send('Server Error');
}
});
uj5u.com熱心網友回復:
您的代碼現在從資料庫加載所有資料并在前端過濾。這不是一個好方法。
您必須在 mongo 查詢中進行過濾并僅回傳您想要的值。所以你可以試試這段代碼:
前端執行此呼叫(或您為 URL 設計的任何其他結構):
const res = await axios.get($'/api/users/{keyword}');
和后端
router.get('/', async (req, res) => {
try {
const users = await User.find({
username: {
$regex: req.params.user,
$options: "i"
}
});
res.json(users);
} catch (error) {
console.log(error.message);
res.status(500).send('Server Error');
}
});
此查詢使用帶有選項的正則運算式,i這意味著不區分大小寫。但也許你不想要這個選項,而只是keyword從前端發送小寫字母。
無論如何,正確的方法是生成一個“REST URL”并使用資料庫中的查詢在后端進行過濾。這樣,前端只會收到您想要的資料。
示例查詢如何在此處作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/418690.html
標籤:
