Javascript 无法从mongodb获取值
我在节点js中有一个mongodbapi返回 在数据库中,我有值,但无法使用API检索它 我的模型Javascript 无法从mongodb获取值,javascript,node.js,mongodb,api,mongoose,Javascript,Node.js,Mongodb,Api,Mongoose,我在节点js中有一个mongodbapi返回 在数据库中,我有值,但无法使用API检索它 我的模型 const mongoose = require('mongoose'); mongoose.set('useCreateIndex', true) const plannerSchema = mongoose.Schema({ email: { type: String, required: true }, task: {
const mongoose = require('mongoose');
mongoose.set('useCreateIndex', true)
const plannerSchema = mongoose.Schema({
email: {
type: String,
required: true
},
task: {
type: String,
required: true
},
createdat: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('planner', plannerSchema);
我的代码
const express = require('express');
const router = express.Router();
const PlannerSchema = require('../models/planner');
router.post('/get', async(req, res) => {
let email = req.body.email
try {
const tasks = PlannerSchema.find({email:email})
if(tasks){
res.status(200).json({
message:"success",
content:tasks
})
} else {
res.status(200).send('empty')
}
} catch (error) {
res.status(400).send('error-occurred')
}
})
我总是在出错时得到响应
请给我一个解决办法
感谢advacePlannerSchema。find({email:email})
是异步的,所以使用wait
关键字。而find
方法在MongoDB中被弃用,因此最好使用findOne
。根据ES6版本,如果键和值相同,则只能使用email
而不是email:email
。因此,您的代码最终将
const express = require('express');
const router = express.Router();
const PlannerSchema = require('../models/planner');
router.post('/get', async (req, res) => {
let email = req.body.email;
try {
const tasks = await PlannerSchema.find({
email: email
}) // use await here
if (tasks) {
res.status(200).json({
message: "success",
content: tasks
});
} else {
res.status(200).send('empty');
}
} catch (error) {
console.log(error); //to print error on terminal
res.status(400).send('error-occurred');
}
})
const express=require('express');
const router=express.router();
const PlannerSchema=require('../models/planner');
路由器.post('/get',异步(req,res)=>{
让email=req.body.email;
试一试{
//这里的变化
const tasks=await PlannerSchema.findOne({email})
如果(任务){
res.status(200).json({
信息:“成功”,
内容:任务
});
}否则{
res.status(200).send('empty');
}
}捕获(错误){
console.log(error);//在终端上打印错误
res.status(400).send('发生错误');
}
})
您也可以使用then()而不是像下面这样等待:
const express = require('express');
const router = express.Router();
const PlannerSchema = require('../models/planner');
router.post('/get', async(req, res) => {
let email = req.body.email
try {
const tasks = PlannerSchema.find({email:email}).then((doc)={
if(doc){
res.status(200).json({
message:"success",
content:tasks
})
} else {
res.status(200).send('empty')
}
});
} catch (error) {
res.status(400).send('error-occurred')
}
})
能否在catch块中添加行
console.log(error)
?它将显示尝试从MongoDB查找文档时发生的错误。好的,我也将尝试它。PlannerSchema.find({email:email})
是一个异步操作。建议在该语句中使用wait
,以同步处理DB查询。因此,您可以将tasks
声明更改为const tasks=wait PlannerSchema.find({email:email})
ok我将尝试将循环结构转换为JSON-->从具有构造函数“NativeTopology”的对象开始|属性“s”->具有构造函数“object”的对象|属性“sessionPool”->具有构造函数“ServerSessionPool”的对象--属性“topology”关闭圆圈这是我的错误消息