Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法从mongodb获取值_Javascript_Node.js_Mongodb_Api_Mongoose - Fatal编程技术网

Javascript 无法从mongodb获取值

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: {

我在节点js中有一个mongodbapi返回

在数据库中,我有值,但无法使用API检索它

我的模型

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')
    }
})
我总是在出错时得到响应

请给我一个解决办法

感谢advace

PlannerSchema。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”关闭圆圈这是我的错误消息