regex - 如何将 express 查询参数解析为 mongodb 正则表达式查询?
问题描述
我尝试用 express 构建一个测试后端。并遇到了一个我似乎无法克服的问题。
试图从 req.query.name 中为查询对象 $regex 参数提供一个值。但它只返回一个空数组。当我 console.log(laptopName) 它输出作为查询参数给出的正确值。
如果我只是$regex: laptopName
用一个具体的值替换,$regex: 'vivobook'
我会得到结果。
使用 $regex: laptopName
console.log 看起来像这样 { name: { '$regex': '"vivobook"', '$options': 'i' } }
使用$regex: 'vivobook'
console.log 看起来像这样: { name: { '$regex': 'vivobook', '$options': 'i' } }
app.get("/api/v1/laptops", (req, res) => {
MongoClient.connect(mongo_url, { useNewUrlParser: true }, (err, client) => {
const db = client.db("laptop_backend");
const collection = db.collection("laptops");
let laptopName = req.query.name;
let query = {
name: {
$regex: laptopName,
$options: 'i'
}
};
collection
.find(query)
.toArray()
.then(response => res.status(200).json(response))
.catch(err => console.error(err));
});
});
解决方案
尝试直接从参数获取笔记本电脑名称,例如
let { name } = req.query;
let query = {
name: {
$regex: name,
$options: 'i',
}
};
如果您要完全修改,我建议在没有承诺的情况下更改代码。
app.get("/api/v1/laptops", async (req, res) => {
try {
const client = await MongoClient.connect(mongo_url, { useNewUrlParser: true });
const db = client.db('laptop_backend');
const collection = db.collection('laptops');
const { name } = req.query;
const query = {
name: {
$regex: name,
$options: 'i',
},
};
const result = await collection.find(query);
res.status(200).json({ result });
} catch (e) {
console.log(e);
res.status(400).json({ error: true });
}
});
推荐阅读
- python - 我下载了漏洞利用脚本,当尝试运行它时,它给了我一个错误
- python - 为链接抓取表格,从每个链接获取数据,并对许多页面执行相同操作(分页)
- unit-testing - Mockito junit 测试不起作用-@mockBean 模拟的 bean 为空
- php - 提交表单时如何计算以相同前缀开头的字段名称?
- sql - 验证 SQL 查询
- ios - 在 SwiftUI 中暂停通知发布者
- python - 如何使用上下文在同一行中定义的上下文设置默认值?
- java - NoClassDefFoundError 与 Apache 公共数学
- javascript - 类中的 setInterval 以创建游戏内时钟
- mysql - 错误:secretOrPrivateKey 必须有值