我尝试用express构建一个测试后端。 遇到了一个我似乎无法克服的问题。
试图给查询对象$ regex param一个来自req.query.name的值。但是它只返回一个空数组。当我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));
});
});
答案 0 :(得分:0)
尝试直接从诸如以下的参数中获取笔记本电脑名称
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 });
}
});