const number =req.body.number;
{ $expr: { $lte: [ { $toInt: "$rent" }, number ] } }
請問各位大大
我在測試的時候 手動輸入是可以的 像下面這樣
{ $expr: { $lte: [ { $toInt: "$rent" }, 1000 ] } }
這樣是搜尋得出來,但今天如果我自己拿前端的值來用時
他就查不出來了..我看值也是說undefined 但我不太知道哪邊出問題
之前也是這樣要值的
該從哪邊下手處理呢 還是語法有錯
先感謝!!
估計你的 number 不是數字了
用 typeof number
或者把 number 印出來試試看吧
看看吧
以下實測
(async () => {
const collection = db.get('ithelp');
const number = 1000;
const result1 = await collection.find({ $expr: { $lte: [ { $toInt: '$rent' }, number ]}})
console.log(result1);
console.log('---------------');
const string = '1000';
const result2 = await collection.find({ $expr: { $lte: [ { $toInt: '$rent' }, string ]}})
console.log(result2);
})()
result1
[ { _id: 5daf2bda0edb25e20165129a, rent: '1000' } ]
result2 (以文字查詢會把所有印出來)
[ { _id: 5daf2bda0edb25e20165129a, rent: '1000' },
{ _id: 5daf2bf8e209f9063963e76e, rent: '2000' },
{ _id: 5daf2bf8e209f9063963e770, rent: '3000' },
{ _id: 5daf2bf8e209f9063963e772, rent: '4000' },
{ _id: 5daf2c32e209f9063963e78a, rent: '5000' } ]
dragonH我自己設const number= 1000;
可以索引出來
然後看type好像也是undefined
前端就一個很普通的input而已
但我怎麼req都不行
dragonH
我後來發現 我把它改成req.query就找的到了好像是因為他在同一個query表單內
不過現在又出現一個問題就是他雖然有值
但還是查不到 似乎不是int?
我req.query出來的值是
{ search: '', price: '3000' }
這樣 但查不出東西
像我自己設a=3000 console.log(a)出來的3000黃色的字
但我用如果req.query的值是白色的字 不過我應該已經有轉成int了才對...
呃
你前端是用什麼方式傳值的
為什麼會是在 req.query
通常會是 query string 才會在 req.query
裡
像我自己設a=3000 console.log(a)出來的3000黃色的字
基本上
你還是要在後端做這些參數的驗證
因為你沒辦法保證
這些到你後端的 http request
一定有經過你的前端
老話一句
永遠不要相信前端來的東西
沒錯, 我只相信新台幣 ! 不相信前端的東西
新台幣也有假鈔XD
form(action='/articles/search' method='get')
input(type='number' name='price' placeholder='租金範圍')
input.form-control(name='search' type='text' placeholder='輸入' style='height:50px; font-size: 16px;')
router.get('/search' ,function(req,res,next){
const a=3000;
const price=req.query.price;
parseInt(test);
const regex = new RegExp(req.query.search, 'gi');
const result=Article.find({$and:[{$or:[{address:regex},{name:regex}]},{ $expr: { $lte: [ { $toInt: "$rent" }, price ] } }]},function(err,article){
if(err){
console.log(err);
}
else{
console.log(req.query);
res.render('house',{article:article});
}
}
);
});
我前端是一個form的方式傳值
我也不知為什麼我req.body會undefined
然後用req.query就可以了...
難道是因為他們兩個input被包在一起了嗎
那我有辦法在後端再轉int嗎
我有查一個parseInt的方法好像行不通
因為你用的是 get 阿
所以才會在 req.query
中找到
那我有辦法在後端再轉int嗎
應該是有很多方法
e.g. Number(number)
看起來比較厲害的可以用
~~'1234'
parseInt 應該也是可以
不知道你遇到的問題是什麼
dragonH
我剛剛parseInt打在裡面突然就可以了 嗚嗚嗚
原來get跟post req的東西不一樣 又學到了
感謝大大 後端真的還有好多東西要摸
Article.find({$and:[{$or:[{address:regex},{name:regex}]},{ $expr: { $lte: [ { $toInt: "$rent" }, parseInt(price) ] } }]}
可先試試
const number = 1000;
{ $expr: { $lte: [ { $toInt: "$rent" }, number ] } }
看能不能檢索出來 !
感覺有點像是在比較 小於等於
時, number 被判定為 req.body.number
darwin0616我 自己設const number= 1000;
可以索引出來
但從前端req就不行了
那就是req.body.number這段沒抓到「數值」造成的結果!參考下下面dragonH的方法把req.body.number的值印出來看看吧!