我有后端代码,我想在那里找到一些使用标签的数据。标签将从react前端。我试着像第一个后端代码一样做,我做了find({tags: { $all: ["english"] } })
。我想只是用前端的参数替换["english]
数组做同样的事情。但它就是不工作。
我只想找到一个可行的解决方案,可以使用前端的标记找到特定的数据。
后端1:
router.get("/", (req, res) => {
Test.find({ tags: { $all: ["english"] } }).then((items) => res.json(items));
});
后端2:
const Test = require("../../models/test");
router.get("/:tags", (req, res) => {
const query = req.params.tags;
Test.find({ tags: { $all: [query] } }).then((items) => res.json(items));
});
前端:
export default function Test() {
useEffect(() => {
fetchItems();
}, []);
const fetchItems = async () => {
const tags = ["english", "noun"]
const res = await fetch(`/api/test/${tags}`);
const data = await res.json();
console.log(data)
};
return (
<div>Hi</div>
);
}
数据:
[
{ "q": "What is english?", "tags": ["english"] },
{ "q": "What is noun?", "tags": ["english", "noun"] },
{ "q": "What is pronoun?", "tags": [ "english", "pronoun"] }
]
编辑:当我使用fetch发送get请求时:const res = await fetch(
/api/test/${tags});
,请求如下所示:http://localhost:5000/api/test/english,noun
.
在请求字符串中使用逗号发送请求是否是一种好方法?
编辑2:对于请求字符串中的逗号问题,我是这样做的。看起来像我期望的那样工作。前面:
const fetchItems = async () => {
const tags = ["english", "noun"]
const tags_params = tags.map((l)=>'tags='+encodeURIComponent(l)).join('&')
const res = await fetch(`/api/test/?${tags_params}`);
const data = await res.json();
};
后端:
const Test = require("../../models/test");
router.get("/", (req, res) => {
Test.find({ tags: { $all: req.query.tags } }).then((q) => res.json(q));
});
1条答案
按热度按时间li9yvcax1#
您应该拆分“req.params.tags”以将其转换为数组。
我知道您用[ ]将查询变量括起来,如下所示:
{标签:{ $全部:[查询] } }
但这不会把元素单独放进数组,而是把整个字符串作为一个元素放进数组.
检查以下示例:
我的路线:
});
当我向这个路由发出请求时,比如http://localhost:3002/test-for-nasem/apple,香蕉使用 Postman :
从API结果可以看出,
query
不是您想要的数组,而arr
是。另一方面,有多种方法可以通过HTTP GET请求发送数组参数。
当查询参数在请求URL中重复多次时,Express会将其公开为数组:
这同样适用于其他方法中的req.body。
您也可以使用带有逗号的格式,并在后端拆分参数。