How to fix returning multiple same users in response in Nodejs? When I currently use the API it's giving me multiple same users in response for example "there is only one user in the database MongoDB and that username is User1 so if I type U it gives User1 User1 User1 User1 User1 multiple times" How can I fix that? And only give one user instead of looping the same user multiple times?
router.post('/searchuser', (req, res) => {
const { keyword } = req.body;
if (!keyword) {
return res.status(422).json({ error: 'Please Search A Username' });
}
User.find({ username: { $regex: keyword, $options: 'i' } })
.then(user => {
console.log(user);
let data = [];
user.map(item => {
data.push({
_id: item.id,
username: item.username,
email: item.email,
profileImg: item.profileImg,
posts: item.posts,
})
})
console.log(data);
if (data.length == 0) {
return res.status(422).json({ error: 'No User Found With This Keyword' });
}
res.status(200).send({ message: 'User Found', user: data });
})
.catch(err => {
res.status(422).json({ error: 'Server Error' });
})
});
Frontend:
const [keyword, setKeyword] = useState("");
const [keyword, setKeyword] = useState("");
useEffect(() => {
GetSearchedUser();
}, [keyword])
const GetSearchedUser = async () => {
if (keyword.length === 0) {
setData([]);
setError(null);
return;
}
setLoading(true);
try {
const res = await fetch('http://10.0.2.2:3000/searchuser', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ keyword })
});
const { error, message, user } = await res.json();
if (error) {
setData([]);
setError(error);
} else if (message === 'User Found') {
setError(null);
setData(user);
}
} catch (error) {
console.error(error);
setData([]);
setError(error.message);
} finally {
setLoading(false);
}
};
Via Active questions tagged javascript - Stack Overflow https://ift.tt/gRsVZjA
Comments
Post a Comment