【问题标题】:TypeError: Cannot read property 'title' of nullTypeError:无法读取 null 的属性“标题”
【发布时间】:2018-09-12 05:29:32
【问题描述】:

我收到此 JavaScript 错误:

TypeError: 无法读取 null 的属性“标题”

代码如下:

Mds-iMac:cmscart imac$ nodemon app [节点监视器] 1.11.0 【nodemon】随时重启,输入rs [nodemon] 观看:. [nodemon] 开始node app app.js (node:2274) DeprecationWarning: open() 在 mongoose >= 4.11.0 中已弃用,请改用 openUri(),如果使用 connect() 或 createConnection(),请设置 useMongoClient 选项。见http://mongoosejs.com/docs/4.x/docs/connections.html#use-mongo-client (node:2274) DeprecationWarning: Mongoose: mpromise (mongoose 的默认承诺库) 已弃用,请插入您自己的承诺库:http://mongoosejs.com/docs/promises.html 服务器在 3200 端口启动 Db.prototype.authenticate 方法将在下一个主要版本 3.x 中不再可用,因为 MongoDB 3.6 将仅允许对 admin db 中的用户进行身份验证,并且不再允许在套接字上使用多个凭据。请使用带有身份验证凭据的 MongoClient.connect 进行身份验证。 连接到 MongoDB

events.js:182
  throw er; // Unhandled 'error' event
  ^

TypeError: Cannot read property 'title' of null

at /Users/imac/Desktop/cmscart/routes/pages.js:17:24
at model.Query.<anonymous> (/Users/imac/Desktop/cmscart/node_modules/mongoose/lib/model.js:4074:16)
at /Users/imac/Desktop/cmscart/node_modules/kareem/index.js:273:21
at /Users/imac/Desktop/cmscart/node_modules/kareem/index.js:131:16
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)

[nodemon] 应用程序崩溃 - 启动前等待文件更改...

page.js 代码为:

var express = require('express');
var router = express.Router();

// Get Page model
var Page = require('../models/page');

/*
 * GET /
 */
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 a page
 */
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; 

JavaScript 函数内部发生错误 title: page.title, above.

请帮帮我。

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:
    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);
      });
    });
    

    使用此代码,它的逻辑是相同的,但我已经使用它肯定对我有用的 Promise 处理了这些条件。希望对你有帮助:)

    【讨论】:

      【解决方案2】:
      if (err)
         console.log(err);
      

      是一个问题。当您收到错误时,您应该返回一个 http 错误然后退出函数,例如:

      if (err) {
          console.log(err);
          res.statusCode = 500;
          res.end('error');
      }
      

      当出现错误时,page 变量将为空,这解释了引发的异常。

      【讨论】:

      • 我使用了您的代码,但它不能解决问题。有什么想法吗?
      【解决方案3】:

      意思是当

      function (err, page) {

      在Page.findOne 内部被调用,page 参数没有title 的属性。

      (没有关于如何使用Page.findOne 的上下文,很难说如何修复它)

      【讨论】:

        猜你喜欢
        • 2020-01-29
        • 2022-06-19
        • 1970-01-01
        • 2021-02-27
        • 2017-10-27
        • 1970-01-01
        • 2021-08-04
        • 2022-01-12
        • 2021-12-04
        相关资源
        最近更新 更多