0
votes

[nodemon] starting node app.js

(node:11472) DeprecationWarning: open() is deprecated in mongoose >= 4.11.0, use openUri() instead, or set the useMongoClient option if using connect() or createConnection(). See http://mongoosejs.com/docs/4.x/docs/connections.html#use-mongo-client (node:11472) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html Server started on port 3000 Connected to MongoDB events.js:287 throw er; // Unhandled 'error' event ^

TypeError: Cannot read property 'title' of null at C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\routes\pages.js:17:25 at model.Query. (C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\mongoose\lib\model.js:4093:16) at C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:273:21 at C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:131:16 at processTicksAndRejections (internal/process/task_queues.js:79:11) Emitted 'error' event on Function instance at: at model.Query. (C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\mongoose\lib\model.js:4095:13) at C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:273:21 at C:\Users\user\desktop\current\Nodejs-Course-file-master\cmscart\node_modules\kareem\index.js:131:16 at processTicksAndRejections (internal/process/task_queues.js:79:11)

code is mentioned below:

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;
1
Can you please make sure all your code or output from console is in code blocks and formatted in readable manner? Also please specify exact question you want to ask. - zmii
Error basically says that page on line 17 is undefined. your if statement on lines 14-15 is only logs error to console, which we can't see. Sometimes DB clients are not sending error back when there is nothing in DB for specific key, but instead return empty object, or maybe undefined (I haven't seen this in my life)... Try console.log(page) prior to line 17 to see what you actually have as page object. - zmii
in :slug handler below one that throws an error you have if (!page) { res.redirect('/'); }. I suggest you have the same in the first handler. - zmii

1 Answers

0
votes

Do you get that error with the '/' route?
If so, it seems like your mongo query can't find any suitable document.
You need to render only if there is a page found:

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
        });
    });

});