我有這個代碼,我在資料庫中找到了一個帶有這些查詢的監視器
const monitorfind = await monitorschema.findOne({ Price: { $lte: Number(reqbody.price) } }, {Size: {$gte: Number(reqbody.size - 8)}}, {hz: {$gte: Number(reqbody.hz - 25)}}, {Resolution: {$gte: Number(reqbody.res)}}, {ResponseTime: {$lte: Number(reqbody.ms 4)}})
當我運行代碼時,我收到此錯誤:
throw new MongooseError('Callback must be a function, got ' callback);
^
MongooseError: Callback must be a function, got [object Object]
at Function.Model.$handleCallbackError (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\mongoose\lib\model.js:4924:11)
at Function.findOne (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\mongoose\lib\model.js:2248:19)
at C:\Users\Sochum\Desktop\pickitly_web_main\routes\monitors.js:23:49
at Layer.handle [as handle_request] (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Sochum\Desktop\pickitly_web_main\node_modules\express\lib\router\index.js:275:10)
我該如何解決?
uj5u.com熱心網友回復:
您需要exec()在findOne. 如果我們想使用async-await. 將查詢更改為以下應該可以作業:
const monitorfind = await monitorschema.findOne({
Price: { $lte: Number(reqbody.price) },
Size: {$gte: Number(reqbody.size - 8)},
hz: {$gte: Number(reqbody.hz - 25)},
Resolution: {$gte: Number(reqbody.res)},
ResponseTime: {$lte: Number(reqbody.ms 4)}
}).exec()
參考:https : //masteringjs.io/tutorials/mongoose/promise
如果您使用的是舊版本的貓鼬(<5),則必須按照第一個答案中的findOne建議將回呼函式作為第二個引數傳遞給。
uj5u.com熱心網友回復:
我認為您reqbody的模式是錯誤的。正確的模式是。但是req.body您function在使用代碼時使用任何中間件來傳遞資料,否則您可以將其req.body用于您的代碼。
試試這個
const conditions = {
Price: { $lte: Number(reqbody.price) },
Size: {$gte: Number(reqbody.size - 8)},
hz: {$gte: Number(reqbody.hz - 25)},
Resolution: {$gte: Number(reqbody.res)},
ResponseTime: {$lte: Number(reqbody.ms 4)}
}
monitorschema.findOne(conditions, function (err, monitor) {
console.log(monitor) //If matching any data it is show here
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399224.html
