Не отображается страница

Запускал проект, сайт отображался нормально, сейчас почему то выдаёт данную ошибку:

C:\Users\loky\Desktop\articlety_future\views\archive\index.ejs:13 11| <%=posts[i].title %> 12| </a> >> 13| <% if (posts[i].owner.login === user.login) { %> 14| <a style="color: black;text-decoration: none;" href="/post/edit/<%=posts[i].id %>">✎</a> 15| <% } %> 16| </h2> Cannot read property 'login' of null
    TypeError: C:\Users\loky\Desktop\articlety_future\views\archive\index.ejs:13
    11|                   <%=posts[i].title %>
    12|                 </a>
 >> 13|                 <% if (posts[i].owner.login === user.login) { %>
    14|                   <a style="color: black;text-decoration: none;" href="/post/edit/<%=posts[i].id %>">✎</a>
    15|                   <% } %>
    16|               </h2>

Cannot read property 'login' of null
    at eval (C:\Users\loky\Desktop\articlety_future\views\archive\index.ejs:35:27)
    at index (C:\Users\loky\Desktop\articlety_future\node_modules\ejs\lib\ejs.js:682:17)
    at tryHandleCache (C:\Users\loky\Desktop\articlety_future\node_modules\ejs\lib\ejs.js:254:36)
    at View.exports.renderFile [as engine] (C:\Users\loky\Desktop\articlety_future\node_modules\ejs\lib\ejs.js:485:10)
    at View.render (C:\Users\loky\Desktop\articlety_future\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\loky\Desktop\articlety_future\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\loky\Desktop\articlety_future\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\loky\Desktop\articlety_future\node_modules\express\lib\response.js:1012:7)
    at posts (C:\Users\loky\Desktop\articlety_future\routes\archive.js:26:9)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)

views/archive/index.ejs:

<% include ../layout/header.ejs %>

  <div class="main">
    <div class="container">
      <div class="content">
        <% for (var i = 0; i < posts.length; i++) { %>
          <div class="post">
            <div class="top">
              <h2>
                <a href="/posts/<%=posts[i].url %>">
                  <%=posts[i].title %>
                </a>
                <% if (posts[i].owner.login === user.login) { %>
                  <a style="color: black;text-decoration: none;" href="/post/edit/<%=posts[i].id %>">✎</a>
                  <% } %>
              </h2>
            </div>
            <div class="body">
              <%-posts[i].body %>
            </div>
            <div class="bottom">
              <div class="author">
                Автор:
                <a href="/users/<%=posts[i].owner.login %>">
                  <%=posts[i].owner.login %>
                </a>
              </div>
              <a href="/posts/<%=posts[i].url %>#<%=posts[i].id %>">Комментарии:
                <%=posts[i].commentCount %>
              </a>
            </div>
          </div>
          <% } %>

            <div class="pagination">
              <% if (current > 2) { %>
                <a class="new" href="/archive/<%= Number(current) - 1 %>">← К новым</a>
                <% } %>
                  <% if (current == 2) { %>
                    <a class="new" href="/">← На главную</a>
                    <% } %>
                      <% if (pages > 0 && current < pages) { %>
                        <a class="old" href="/archive/<%= Number(current) + 1 %>">К старым →</a>
                        <% } %>

            </div>


      </div>

      <% include ../layout/sidebar.ejs %>

    </div>
  </div>

  <% include ../layout/footer.ejs %>

routes/archive.js:

const express = require('express');
const router = express.Router();
const moment = require('moment');
moment.locale('ru');

const config = require('../config');
const models = require('../models');

async function posts(req, res) {
  const userId = req.session.userId;
  const userLogin = req.session.userLogin;
  const perPage = +config.PER_PAGE;
  const page = req.params.page || 1;

  try {
    const posts = await models.Post.find({
      status: 'published'
    })
      .skip(perPage * page - perPage)
      .limit(perPage)
      .populate('owner')
      .sort({ createdAt: -1 });

    const count = await models.Post.count();

    res.render('archive/index', {
      posts,
      current: page,
      pages: Math.ceil(count / perPage),
      user: {
        id: userId,
        login: userLogin
      }
    });
  } catch (error) {
    throw new Error('Server Error');
  }
}

// routers
router.get('/', (req, res) => posts(req, res));
router.get('/archive/:page', (req, res) => posts(req, res));

router.get('/posts/:post', async (req, res, next) => {
  const url = req.params.post.trim().replace(/ +(?= )/g, '');
  const userId = req.session.userId;
  const userLogin = req.session.userLogin;

  if (!url) {
    const err = new Error('Not Found');
    err.status = 404;
    next(err);
  } else {
    try {
      const post = await models.Post.findOne({
        url,
        status: 'published'
      });

      if (!post) {
        const err = new Error('Not Found');
        err.status = 404;
        next(err);
      } else {
        const comments = await models.Comment.find({
          post: post.id,
          parent: { $exists: false }
        });
        // .populate({
        //   path: 'children',
        //   populate: {
        //     path: 'children',
        //     populate: {
        //       path: 'children'
        //     }
        //   }
        // });

        console.log(comments);

        res.render('post/post', {
          post,
          comments,
          moment,
          user: {
            id: userId,
            login: userLogin
          }
        });
      }
    } catch (error) {
      throw new Error('Server Error');
    }
  }
});

// users posts
router.get('/users/:login/:page*?', async (req, res) => {
  const userId = req.session.userId;
  const userLogin = req.session.userLogin;
  const perPage = +config.PER_PAGE;
  const page = req.params.page || 1;
  const login = req.params.login;

  try {
    const user = await models.User.findOne({
      login
    });

    const posts = await models.Post.find({
      owner: user.id
    })
      .skip(perPage * page - perPage)
      .limit(perPage)
      .sort({ createdAt: -1 });

    const count = await models.Post.count({
      owner: user.id
    });

    res.render('archive/user', {
      posts,
      _user: user,
      current: page,
      pages: Math.ceil(count / perPage),
      user: {
        id: userId,
        login: userLogin
      }
    });
  } catch (error) {
    throw new Error('Server Error');
  }
});

module.exports = router;

Model Post:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// const URLSlugs = require('mongoose-url-slugs');

const schema = new Schema(
  {
    title: {
      type: String
    },
    body: {
      type: String
    },
    url: {
      type: String
    },
    owner: {
      type: Schema.Types.ObjectId,
      ref: 'User'
    },
    status: {
      type: String,
      enum: ['published', 'draft'],
      required: true,
      default: 'published'
    },
    commentCount: {
      type: Number,
      default: 0
    }
  },
  {
    timestamps: true
  }
);

schema.statics = {
  incCommentCount(postId) {
    return this.findByIdAndUpdate(
      postId,
      { $inc: { commentCount: 1 } },
      { new: true }
    );
  }
};

// schema.pre('save', function(next) {
//   console.log(this);
//   this.url = `${tr.slugify(this.title)}-${Date.now().toString(36)}`;
//   next();
// });

// schema.plugin(
//   URLSlugs('title', {
//     field: 'url',

//     generator: text => tr.slugify(text)
//   })
// );

schema.set('toJSON', {
  virtuals: true
});

module.exports = mongoose.model('Post', schema);

app.js:

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');
const staticAsset = require('static-asset');
const mongoose = require('mongoose');
const session = require('express-session');

const MongoStore = require('connect-mongo');

const config = require('./config');
const routes = require('./routes');

// database
mongoose.connect((config.mongoURI), {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true,
  }) 
  .then(() => 
  console.log('MongoDB connected'))
  // require('./mocks')())
  .catch(err => console.log(err))

// express
const app = express();

// sessions
app.use(session({
    secret: config.SESSION_SECRET,
    resave: true,
    saveUninitialized: false,
    store: MongoStore.create({ mongoUrl: config.mongoURI })
})
);

// sets and uses
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(staticAsset(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
// app.use(expressSession({secret: 'your secret', saveUninitialized: true, resave: false}));
app.use(
  '/javascripts',
  express.static(path.join(__dirname, 'node_modules', 'jquery', 'dist'))
);

// routes
app.use('/', routes.archive);
app.use('/api/auth', routes.auth);
app.use('/post', routes.post);
app.use('/comment', routes.comment);
app.use('/upload', routes.upload);

// catch 404 and forward to error handler
app.use((req, res, next) => {
  const err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
// eslint-disable-next-line no-unused-vars
app.use((error, req, res, next) => {
  res.status(error.status || 500);
  res.render('error', {
    message: error.message,
    error: !config.IS_PRODUCTION ? error : {}
  });
});

app.listen(config.PORT, () =>
  console.log(`Example app listening on port ${config.PORT}!`)
);

Я чистил кэш, перезапускал компьютер, всё равно не отображает, хотя до этого всё было нормально.


Ответы (0 шт):