2017-11-18 6 views
0

を必要と私は新しいブログ記事を作成すると、それを提出しようとすることはできませんはTypeError:「例外TypeError:未定義のプロパティを読み取ることができません 『_id』」私は次のエラーを取得する未定義ボディパーサーの「_id」がインストールされているプロパティを読み、

var author = { 
     id: req.user._id, 
     username: req.user.username 
    }; 

私はまた私のモデルを掲載していますし、以下のapp.js:ここ

は、エラーがこのラインでトリガされている

// CREATE ROUTE 
router.post("/", function(req, res){ 

// Sanitizes blog body to prevent harmful content through it 
req.body.blog.body = req.sanitize(req.body.blog.body); 
    // get data from form and add to blogs array 
    var title = req.body.title; 
    var image = req.body.image; 
    var body = req.body.body; 
    var author = { 
     id: req.user._id, 
     username: req.user.username 
    }; 


    var newBlog = { title: title, image: image, body: body, author: author}; 
    //Create blog 
    Blog.create(newBlog, function(err, newlyCreated){ 
     //handle error if can't create post 
     if(err){ 
      res.render("bposts/new"); 
      //otherwise post it and redirect back to Blog Posts 
     } else { 
      console.log(newlyCreated); 
      res.redirect("/bposts"); 
     } 
    }); 
}); 

「idが定義されていない」コードです。このトピックに関する私の研究をしたとき、req.something.whateverPropertyTryingToParse、または私の場合はreq.user._idを解析できないようになったようです。私のbody parserがインストールされ、package.jsonファイルに保存されます。私のapp.jsファイルに必要です。なぜ私はIDを解析できないのか分かりません。なぜこれが起こっているのかについての助けと説明は感謝しています。

ブログモデル:

var mongoose = require("mongoose"); 

// SCHEMA 
var blogSchema = new mongoose.Schema({ 
    title: String, 
    image: String, 
    body: String, 
    created: {type: Date, default: Date.now}, 
    author: { 
     id: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "User" 
     }, 
     username: String 
    }, 
    comments: [ 
     { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: "Comment" 
     } 
    ] 
}); 
//MODEL 
module.exports = mongoose.model("Blog", blogSchema); 

ユーザーモデル:

var mongoose = require("mongoose"); 
var passportLocalMongoose = require("passport-local-mongoose"); 

var UserSchema = new mongoose.Schema({ 
    username: {type: String, unique: true, required: true}, 
    password: String, 
    // avatar: String, 
    firstName: String, 
    lastName: String, 
    email: {type: String, unique: true, required: true}, 
    // resetPasswordToken: String, 
    // resetPasswordExpires: Date, 
    // isAdmin: {type: Boolean, default: false} 
}); 

UserSchema.plugin(passportLocalMongoose); 

module.exports = mongoose.model("User", UserSchema); 

app.js

var express = require("express"), 
    app = express(), 
    bodyParser = require("body-parser"), 
    mongoose = require("mongoose"), 
    expressSanitizer = require("express-sanitizer"), 
    passport = require("passport"), 
    cookieParser = require("cookie-parser"), 
    LocalStrategy = require("passport-local"), 
    flash = require("connect-flash"), 
    session = require("express-session"), 
    moment = require("moment"), 
    User = require("./models/user"), 
    // seedDB  = require("./seeds"), 
    methodOverride = require("method-override"); 


// APP CONFIG 
mongoose.connect("mongodb://localhost/blog", {useMongoClient: true}); 
//PRODUCTION CONFIG - LIVE URL GOES HERE! 

app.set("view engine", "ejs"); 
app.use(express.static(__dirname + "/assets")); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(expressSanitizer()); 
app.use(methodOverride("_method")); 
app.use(cookieParser('secret')); 
//require moment 
app.locals.moment = require('moment'); 
// seedDB(); //seed test data! 


// PASSPORT CONFIGURATION 
app.use(require("express-session")({ 
    secret: "It's a secret to everyone!!", 
    resave: false, 
    saveUninitialized: false 
})); 

app.use(flash()); 
app.use(passport.initialize()); 
app.use(passport.session()); 
passport.use(new LocalStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

app.use(function(req, res, next){ 
    res.locals.currentUser = req.user; 
    res.locals.success = req.flash('success'); 
    res.locals.error = req.flash('error'); 
    next(); 
}); 


// REQUIRE ROUTES 
var commentRoutes = require("./routes/comments"), 
    bpostRoutes = require("./routes/bposts"), 
    indexRoutes = require("./routes/index"); 


//USE ROUTES 
app.use("/", indexRoutes); 
app.use("/bposts", bpostRoutes); 
app.use("/bposts/:id/comments", commentRoutes); 


//RUN SERVER 
app.listen(process.env.PORT, process.env.IP, function(){ 
    console.log("The Server Has Started!"); 
}); 


//MIDDLEWARE 
    var Comment = require('../models/comment'); 
    var Blog = require('../models/blog'); 
    module.exports = { 
     isLoggedIn: function(req, res, next){ 
      if(req.isAuthenticated()){ 
       return next(); 
      } 
      req.flash('error', 'You must be signed in to do that!'); 
      res.redirect('/login'); 
     }, 
     checkUserBlog: function(req, res, next){ 
     Blog.findById(req.params.id, function(err, foundBlog){ 
      if(err || !foundBlog){ 
       console.log(err); 
       req.flash('error', 'Sorry, that Blog does not exist!'); 
       res.redirect('/bposts'); 
      } else if(foundBlog.author.id.equals(req.user._id) || req.user.isAdmin){ 
       req.Blog = foundBlog; 
       next(); 
      } else { 
       req.flash('error', 'You don\'t have permission to do that!'); 
       res.redirect('/bposts/' + req.params.id); 
      } 
     }); 
     }, 
     checkUserComment: function(req, res, next){ 
     Comment.findById(req.params.commentId, function(err, foundComment){ 
      if(err || !foundComment){ 
       console.log(err); 
       req.flash('error', 'Sorry, that comment does not exist!'); 
       res.redirect('/bposts'); 
      } else if(foundComment.author.id.equals(req.user._id) || req.user.isAdmin){ 
       req.comment = foundComment; 
       next(); 
      } else { 
       req.flash('error', 'You don\'t have permission to do that!'); 
       res.redirect('/bposts/' + req.params.id); 
      } 
     }); 
     }, 
     isAdmin: function(req, res, next) { 
     if(req.user.isAdmin) { 
      next(); 
     } else { 
      req.flash('error', 'This site is now read only thanks to spam and trolls.'); 
      res.redirect('back'); 
     } 
     }, 
     isSafe: function(req, res, next) { 
     if(req.body.image.match(/^https:\/\/images\.unsplash\.com\/.*/)) { 
      next(); 
     }else { 
      req.flash('error', 'Only images from images.unsplash.com allowed.\nSee https://youtu.be/Bn3weNRQRDE for how to copy image urls from unsplash.'); 
      res.redirect('back'); 
     } 
     } 
    }; 
+0

あなたは 'req.user'オブジェクト内のデータを置く任意のミドルウェアを持っていますか? –

+0

@FelixFong私は自分のミドルウェアページで投稿を更新しました。あなたが求めているものが100%わからない。私はまだミドルウェアと認証を使用することに新しいです。それは私が自分で構築した最初の本当のアプリなので、そのために謝罪します。このような –

+0

何か私は推測https://runkit.com/moongod101/5a106a82930ea400122020e8 –

答えて

0

はそれが

var author = { 
    id: req.body.user._id, 
    username: req.body.user.username 
}; 
すべきではありません

投稿しようとしているデータの形式を表示できますか?

関連する問題