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
Node.js Mongoose findOne返回空对象值_Node.js_Mongodb_Express_Mongoose_Mongodb Query - Fatal编程技术网

Node.js Mongoose findOne返回空对象值

Node.js Mongoose findOne返回空对象值,node.js,mongodb,express,mongoose,mongodb-query,Node.js,Mongodb,Express,Mongoose,Mongodb Query,我已经成功地在mongodb compass中保存了一些文档。我试图通过查询一些参数来检索这些值 我知道mongodb findOne有如下论点 查询,字段按默认值:全部、选项和回调 但是操作的结果返回null并抛出类型错误 这是我的密码: router.get('/edit-page/:slug',(req,res) => { console.log('slug:\t' + req.params.slug); Pages.findOne({slug: req.params.slu

我已经成功地在mongodb compass中保存了一些文档。我试图通过查询一些参数来检索这些值

我知道mongodb findOne有如下论点 查询,字段按默认值:全部、选项和回调 但是操作的结果返回null并抛出类型错误

这是我的密码:

router.get('/edit-page/:slug',(req,res) => {
  console.log('slug:\t' + req.params.slug);
  Pages.findOne({slug: req.params.slug},(errs, page) => {
    if(errs){
      req.flash('danger', 'page not found');
      console.error(errs);
    } else {
      console.log(page);
      res.render('admin/edit_page',{
        title: page.title,
        slug: slug,
        content: page.content,
        id: page._id
      });
    }
  });
});
mongo compass中我的数据结构副本:

{   
  "_id":"5a9568fa5ce418423ca8e29f",
  "title":"Home",
  "slug":"home",
  "content":"Home Page for Node CMS Cart",
  "sorting":100,
  "__v":0
}
抛出错误:

GET /admin/routes 200 8.634 ms - 3064
slug:    about-us
null
events.js:183
     throw er; // Unhandled 'error' event
     ^

TypeError: Cannot read property 'title' of null
    at Pages.findOne (E:\nodeCMSApp\routes\admin_routes.js:98:29)
    at model.Query.<anonymous> 
(E:\nodeCMSApp\node_modules\mongoose\lib\model.js:3928:16)
    at E:\nodeCMSApp\node_modules\kareem\index.js:297:21
    at E:\nodeCMSApp\node_modules\kareem\index.js:135:16
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)
[nodemon] app crashed - waiting for file changes before starting...
我似乎不明白为什么在我的回调中,我无法获取对page.title的引用,因为当未指定为“所有字段”时,它是默认字段

PS:Pages是我的模型课

如果是,我如何解决这个问题?
谢谢。

代码很好,您需要处理该情况

router.get('/edit-page/:slug', (req, res) => {
    console.log('slug:\t' + req.params.slug);
    Pages.findOne({
        slug: req.params.slug
    }, (errs, page) => {
        if (errs) {
            req.flash('danger', 'page not found');
            console.error(errs);
        } else {
            console.log(page);
            if (page) {
                res.render('admin/edit_page', {
                    title: page.title,
                    slug: slug,
                    content: page.content,
                    id: page._id
                });
            } else {
                res.status(400).send('Error message');
            }
        }
    });
});

使用这段代码,它将工作的逻辑是相同的,但我已经处理的条件使用承诺,它肯定为我工作。希望它对您有所帮助:

您可以添加您正在呼叫的URL吗。您可以告诉add这些语句在控制台中打印的是什么吗。log'slug:\t'+req.params.slug;console.logpage@Pavan,slug打印正确,因为它来自req主体。但是,页面值是null@RahulSharma,这是完整的url。我不知道为什么附加了%20,但这似乎不是问题代码看起来很好,只是你必须处理这个条件。关于这个条件,你是对的。它打印“错误消息”,但如何解决?这是解决方案,因为您无法控制用户输入。如果slug数据在数据库中可用,它就会工作。但您需要处理负面场景,否则服务器代码将中断。您也可以重定向到错误页而不是消息。段塞数据在db中可用,但为什么代码会中断?如果您传递的是相同的段塞,请忽略大小写(如果需要)。然后试试看
  router.get('/edit-page/:slug', (req, res) => {
      Page.findOne({slug : req.params.slug}).then((page) => {
        if(!page) { //if page not exist in db
          return res.status(404).send('Page not found');
        }
        res.render('admin/edit_page', { //page  exist
          title: page.title,
          slug: page.slug,
          content: page.content,
          id: page._id
        });
      }).catch((e) => {//bad request 
        res.status(400).send(e);
      });
    });