Не отображается страница
Запускал проект, сайт отображался нормально, сейчас почему то выдаёт данную ошибку:
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}!`)
);
Я чистил кэш, перезапускал компьютер, всё равно не отображает, хотя до этого всё было нормально.