【问题标题】:throw er; // Unhandled 'error' event ^ TypeError: Cannot read property 'title' of null投掷者; // 未处理的 'error' 事件 ^ TypeError: Cannot read property 'title' of null
【发布时间】:2020-08-16 08:09:39
【问题描述】:

[nodemon] 开始 node app.js

(node:11472) DeprecationWarning: open() 在猫鼬中被弃用 >= 4.11.0,请改用openUri(),或者如果使用connect()createConnection(),则设置useMongoClient 选项。看 http://mongoosejs.com/docs/4.x/docs/connections.html#use-mongo-client (节点:11472)弃用警告:猫鼬:承诺(猫鼬的 默认承诺库)已弃用,插入您自己的承诺 图书馆代替:http://mongoosejs.com/docs/promises.html 服务器 开始于端口 3000 连接到 MongoDB events.js:287 投掷者; // 未处理的“错误”事件 ^

TypeError:无法读取 null 的属性“标题” 在 C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\routes\pages.js:17:25 在模型.查询。 (C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\mongoose\lib\model.js:4093:16) 在 C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:273:21 在 C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:131:16 在 processTicksAndRejections (internal/process/task_queues.js:79:11) 上发出“错误”事件 函数实例位于: 在模型.查询。 (C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\mongoose\lib\model.js:4095:13) 在 C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:273:21 在 C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:131:16 在 processTicksAndRejections (internal/process/task_queues.js:79:11)

代码如下:

var express = require('express');
var router = express.Router();
// Get Page model
var Page = require('../models/page');
//GET request
router.get('/', function(req, res) {
   Page.findOne({
      slug: 'home'
   }, function(err, page) {
      if (err)
         console.log(err);
      res.render('index', {
         title: page.title,
         content: page.content
      });
   });
});
//GET request 
router.get('/:slug', function(req, res) {
   var slug = req.params.slug;
   Page.findOne({
      slug: slug
   }, function(err, page) {
      if (err)
         console.log(err);
      if (!page) {
         res.redirect('/');
      } else {
         res.render('index', {
            title: page.title,
            content: page.content
         });
      }
   });
});
// Exports
module.exports = router;

【问题讨论】:

  • 您能否确保您的所有代码或控制台输出都在代码块中并以可读方式格式化?还请具体说明您想问的问题。
  • 错误基本上说第 17 行的pageundefined。您在第 14-15 行的 if 语句只是将错误记录到控制台,我们看不到。有时,当 DB 中没有特定键的任何内容时,DB 客户端不会返回错误,而是返回空对象,或者可能是 undefined(我这辈子没见过)...在行前尝试 console.log(page) 17 看看你实际拥有的 page 对象。
  • :slug 下一个抛出错误的处理程序中,您有if (!page) { res.redirect('/'); }。我建议您在第一个处理程序中使用相同的方法。

标签: javascript node.js express mongoose ejs


【解决方案1】:

'/' 路由是否会出现该错误?
如果是这样,您的 mongo 查询似乎找不到任何合适的文档。
只有找到页面时才需要渲染:

router.get('/', function (req, res) {

    Page.findOne({slug: 'home'}, function (err, page) {
        if (err)
            return console.log(err);

        if (!page) 
            return console.log("No page found"); // DO WHAT YOU WANT

        res.render('index', {
            title: page.title,
            content: page.content
        });
    });

});

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 2018-06-30
    • 2017-12-29
    • 2018-01-23
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多