req.user._id в router.get ('/ mypost', requireLogin, (req, res)) в post. js возвращает следующую ошибку: -
Cannot read property '_id' of null
at C:\javascript\merntsack_course\server\routes\post.js:36:25
at Layer.handle [as handle_request]
(C:\javascript\merntsack_course\server\node_modules\express\lib\router\layer.js:95:5)
at next (C:\javascript\merntsack_course\server\node_modules\express\lib\router\route.js:137:13)
at C:\javascript\merntsack_course\server\middleware\requireLogin.js:22:13
at processTicksAndRejections (internal/process/task_queues.js:97:5)
Это это второй раз, когда я получаю сообщение об ошибке относительно идентификатора, пожалуйста, скажите мне, почему это происходит снова и снова и какие исправления мне нужно внести в код, чтобы любой запрос, касающийся идентификатора, не приводил к ошибке. Заранее спасибо . Ниже приведены файлы, которые вызывают наибольшее беспокойство:
post. js: -
const express = require('express')
const router = express.Router()
const mongoose = require('mongoose')
const requireLogin = require('../middleware/requireLogin')
const User = mongoose.model("User")
const Post = mongoose.model("Post")
router.get('/allpost', (req, res) => {
Post.find().populate("postedBy", "_id name").then(posts => {
res.json({ posts })
}).catch(err => {
console.log(err)
})
})
router.post('/createpost', requireLogin, (req, res) => {
const { title, body } = req.body
if (!title || !body) {
return res.status(422).json({ error: "please add all the fields!!" })
}
req.user.password = undefined
const post = new Post({
title,
body,
postedBy: req.user
})
post.save().then(result => {
res.json({ post: result })
}).catch(err => {
console.log(err)
})
})
router.get('/mypost', requireLogin ,(req, res) => {
const id = req.user._id
Post.find({postedBy : id}).populate("postedBy", "id name").then(mypost => {
res.json({ mypost })
}).catch(err => {
console.log(err)
})
})
module.exports = router
requireLogin. js: -
const jwt = require('jsonwebtoken')
const {JWTSECRET} = require('../keys')
const mongoose = require("mongoose")
const User = mongoose.model("User")
module.exports = (req, res, next) => {
const {authorization} = req.headers
//authorization === Bearer token
if (!authorization) {
return res.status(401).json({ error: "you must be logged in" })
}
const token = authorization.replace("Bearer ", "")
jwt.verify(token, JWTSECRET, function(err, payload){
if (err) {
return res.status(401).json({ error: "you must be logged in" })
}
const id = payload.id
User.findById(id).then(userdata => {
req.user = userdata
next()
})
})
}
auth. js: -
const express = require('express')
const router = express.Router()
const mongoose = require('mongoose')
const User = mongoose.model("User")
const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')
const {JWTSECRET} = require('../keys')
const requireLogin = require('../middleware/requireLogin')
router.post('/signup', (req, res) => {
const { name, email, password } = req.body
if (!email || !password || !name) {
return res.status(422).json({ error: " please add all the fields" })
} else {
User.findOne({ email: email }).then((savedUser) => {
if (savedUser) {
return res.status(422).json({ error: " user already exists" })
}
bcrypt.hash(password, 12)
.then(hashedpassword => {
const user = new User({
email,
password: hashedpassword,
name
})
user.save().then(user => {
res.json({ message: "saved successfully" })
}).catch(err => {
console.log(err)
})
})
}).catch(err => {
console.log(err)
})
}
})
router.post('/signin', (req, res) => {
const { email, password } = req.body
if (!email || !password) {
return res.status(422).json({ error: " please add all the fields" })
}
User.findOne({ email })
.then(savedUser => {
if (!savedUser) {
return res.status(422).json({error : "Invalid email or password!!"})
}
bcrypt.compare(password , savedUser.password)
.then(doMatch=>{
if(doMatch){
// res.json({message : "successfully signed in "})
const token = jwt.sign({_id : savedUser._id} , JWTSECRET)
res.json({token})
}else{
return res.status(422).json({error : "Invalid email or password!!"})
}
})
}).catch(err=>{
console.log(err)
})
})
module.exports = router