英文:
When i parse by req.query boolean and number to json it becomes string. Mongo .find() finds nothing
问题
以下是您要翻译的代码部分:
Back end (nodejs)
async getAllEvents(req, res, database, collection) {
try {
const { filter, sort } = req.query;
const events = await mongo
.getClient()
.db(database)
.collection(collection)
.find(filter)
.sort(sort)
.toArray();
res.json(events);
res.end();
} catch (error) {
return res.status(400).json({ message: "err_get_events" });
}
}
Front end (react)
const getAllEvents = async () => {
const query = settings.query;
await axios
.get(Constants.BASE_URL + '/' + settings.urlprefix + '/get', { params: { filter: { helped: true }, sort: { dateAdded: -1 } } })
.then((res) => {
setEvents(res.data);
})
.catch((err) => console.log(err?.response?.data?.message));
};
在后端控制台中我得到的是:{ filter: { helped: 'true' }, sort: { dateAdded: '-1' } }
,并且 helped
和 sort
变成了字符串。
当我将 { helped: 'true' }
传递给 mongo.find()
时,没有返回任何结果,因为在MongoDB中我存储的是布尔值。
在查询解析后,如何在后端获得正确的变量类型?
英文:
Back end (nodejs)
async getAllEvents(req, res, database, collection) {
try {
const { filter, sort } = req.query;
const events = await mongo
.getClient()
.db(database)
.collection(collection)
.find(filter)
.sort(sort)
.toArray();
res.json(events);
res.end();
} catch (error) {
return res.status(400).json({ message: "err_get_events" });
}
}
Front end (react)
const getAllEvents = async () => {
const query = settings.query;
await axios
.get(Constants.BASE_URL + '/' + settings.urlprefix + '/get', { params: { filter: { helped: true }, sort: { dateAdded: -1 } } })
.then((res) => {
setEvents(res.data);
})
.catch((err) => console.log(err?.response?.data?.message));
};
on backend i got from console.log: { filter: { helped: 'true' }, sort: { dateAdded: '-1' } }
and helped
and sort
become string
When i pass { helped: 'true' }
to mongo .find() not give any results, because in mongo i store boolean.
How can i got correct types of variables on the back end side after query parsing?
答案1
得分: 1
布尔值在发送到Mongo之前就已经变成了字符串。HTTP是一种基于文本的协议,无论您将其作为GET参数发送到URL中的内容都是字符串,由服务器负责将其转换为适当的数据类型。
请参阅https://stackoverflow.com/questions/263965/how-can-i-convert-a-string-to-boolean-in-javascript以获取有关如何执行适合您用例的转换的灵感。
英文:
The boolean becomes a string long before it is sent to mongo. HTTP is a text based protocol, whatever you send in the URL as a GET parameter is a string, and it's server's responsibility to convert it to appropriate data type.
Please read https://stackoverflow.com/questions/263965/how-can-i-convert-a-string-to-boolean-in-javascript for inspiration how to do the conversion suitable to your usecase.
答案2
得分: 0
起初,我想使用一个NPM包来自动转换所有接收到的JSON,以避免将来对后端代码的任何关注。但显然我没有耐心进一步研究这个问题。所以我制定了临时解决方案:
async getAllEvents(req, res, database, collection) {
try {
const { filter, sort } = req.query;
if (filter) filter.helped = JSON.parse(filter.helped);
if (sort) sort.dateAdded = JSON.parse(sort.dateAdded);
const events = await mongo
.getClient()
.db(database)
.collection(collection)
.find(filter)
.sort(sort)
.toArray();
res.json(events);
res.end();
} catch (error) {
return res.status(400).json({ message: "err_get_events" });
}
}
请注意,我只翻译了代码部分,没有包括您的问题或其他内容。
英文:
Initially, I wanted to use a NPM package to convert all received json, to make it automatically and avoid any future care about backend code. But apparently i did not have the patience to dwell on this problem further. And i made temporuary solution:
async getAllEvents(req, res, database, collection) {
try {
const { filter, sort } = req.query;
if (filter) filter.helped = JSON.parse(filter.helped);
if (sort) sort.dateAdded = JSON.parse(sort.dateAdded);
const events = await mongo
.getClient()
.db(database)
.collection(collection)
.find(filter)
.sort(sort)
.toArray();
res.json(events);
res.end();
} catch (error) {
return res.status(400).json({ message: "err_get_events" });
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论