Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t包括使用Node js(express)和MongoDB(mongoose)查看用户配置文件_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript Can';t包括使用Node js(express)和MongoDB(mongoose)查看用户配置文件

Javascript Can';t包括使用Node js(express)和MongoDB(mongoose)查看用户配置文件,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我有一个问题,包括审查的用户。为用户创建评论后,它只显示id,而不显示文本、作者或任何其他属性。我很乐意听到任何想法 以下是我的模式和路线: 1) 用户架构: var mongoose = require("mongoose"); var passportLocalMongoose = require("passport-local-mongoose"); //SCHEMA SETTING UP var UserSchema = new mongoose.Schema({ use

我有一个问题,包括审查的用户。为用户创建评论后,它只显示id,而不显示文本、作者或任何其他属性。我很乐意听到任何想法

以下是我的模式和路线:

1) 用户架构:

var mongoose = require("mongoose");

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



//SCHEMA SETTING UP

var UserSchema = new mongoose.Schema({

  username: String,

  password: String,

  isAdmin: {type: Boolean, default: false},

  firstName: String,

  lastName: String,

  email: String,

  avatar: String,

  yearOfBirth: Number,

  job: String,

  experience: Number,

  city: String,

  country: String,

  description: String,

   reviews: [

       {

        type: mongoose.Schema.Types.ObjectId,

        ref: "Review"

       }

    ]

});



UserSchema.plugin(passportLocalMongoose);



module.exports = mongoose.model("User", UserSchema);
2) 复习模式

var mongoose=要求(“mongoose”)

3) 复习路线

    var express    = require("express");
var router     = express.Router({mergeParams: true});
var Post       = require("../models/post");
var Comment    = require("../models/comment");
var User       = require("../models/user");
var Review     = require("../models/review");
var middleware = require("../middleware");

//Review New
router.get("/new",  middleware.isLoggedIn, function(req, res){
    // find campground by id
    console.log(req.params.id);
    User.findById(req.params.id).populate("reviews").exec(function (err, user) {
      if(err){
        console.log(err);
      } else {
        res.render("reviews/new", {user: user});
      }
    });
  });

//Review Create
router.post("/", middleware.isLoggedIn,function(req, res){
   //lookup user using ID
   User.findById(req.params.id).populate("reviews").exec(function (err, user) {
       if(err){
           console.log(err);
           res.redirect("/users");
       } else {
        Review.create(req.body.review, function(err, review){
           if(err){
             req.flash("error", "Something went wrong :(");
               console.log(err);
           } else {
               //add username and id to comment
               review.author.id = req.user._id;
               review.author.username = req.user.username;
               //save comment
               review.save();
               user.reviews.push(review);
               user.save();
               console.log(review);
               req.flash("success", "Successfully added review!");
               res.redirect('/users/' + user._id);
           }
        });
       }
   });
});



module.exports = router;
4) 显示页面


“alt=”用户配置文件图片“>
    职业:
  • 经验:年
  • 出生日期:
  • 位置:
  • 有12个小时的备用时间
  • 关于:

  • 以下部分帖子:

在本例中,review仅显示为id,但在mongo db.reviews.find()-->all ok:

如果我在“显示”页面中放置类似的内容,则会显示我的错误:

无法读取eval时未定义的属性“username”(eval在 编译(D:\My) projects\Backend\timeMe\node\u modules\ejs\lib\ejs.js:618:12), :114:40)at Array.forEach()at eval(eval 在编译时(D:\My) projects\Backend\timeMe\node\u modules\ejs\lib\ejs.js:618:12), :111:21)返回时fn(D:\我的 projects\Backend\timeMe\node_modules\ejs\lib\ejs.js:653:17)位于 tryHandleCache(D:\My projects\Backend\timeMe\node\u modules\ejs\lib\ejs.js:251:36)位于 View.exports.renderFile[作为引擎](D:\My projects\Backend\timeMe\node\u modules\ejs\lib\ejs.js:482:10)位于 View.render(D:\My projects\Backend\timeMe\node\u modules\express\lib\view.js:135:8)位于 tryRender(D:\My projects\Backend\timeMe\node\u modules\express\lib\application.js:640:10) 在Function.render(D:\My projects\Backend\timeMe\node\u modules\express\lib\application.js:592:3) 在ServerResponse.render(D:\My projects\Backend\timeMe\node\u modules\express\lib\response.js:1008:7)
在D:\My projects\Backend\timeMe\routes\users.js:32:11在D:\My projects\Backend\timeMe\node\u modules\mongoose\lib\model.js:4465:16
at(匿名函数)。调用(D:\My projects\Backend\timeMe\node\u modules\mongoose\lib\query.js:3613:7)
在process.nextTick(D:\My projects\Backend\timeMe\node\u modules\mongoose\lib\helpers\query\completeMany.js:35:39) at _combinedTickCallback(内部/流程/下一步_tick.js:131:7)at 进程。_tick回调(内部/process/next_tick.js:180:9)


感谢您的帮助。在这段代码中,真的花了一整天的时间,无法理解这里出了什么问题

您需要填充reviews字段,以便在获取用户信息时获取所有评论数据

//Review New

router.get("/new",  middleware.isLoggedIn, function(req, res){

    // find campground by id

    console.log(req.params.id);



 User.findById(req.params.id).populate('reviews').exec( function(err, user)

     { 

        if(err){

            console.log(err);

        } else {

             res.render("reviews/new", {user: user});

        }

    })
问题出现在用户“显示”路径中。 我只需要填充“评论”,但在用户路径中: //显示用户

router.get("/:id", function(req, res) {
  User.findById(req.params.id).populate("reviews").exec(function(err, foundUser) {
    if(err) {
      req.flash("error", "Something went wrong.");
      return res.redirect("/");
    }
    console.log(foundUser);
    Post.find().where('author.id').equals(foundUser._id).exec(function(err, posts) {
      if(err) {
        req.flash("error", "Something went wrong.");
        return res.redirect("/");
      }
      res.render("users/show", {user: foundUser, posts: posts});
    })
  });
});

您的用户模式和审阅模式都是相同的???我想您忘了复制审阅模式???当然不是:)感谢您指出键入错误没有问题:)检查答案,您需要使用“填充”来获取引用的数据。非常感谢您的评论,但错误仍然相同:(审查时使用相同的ID,如果我尝试执行类似于

的操作,我会遇到错误:无法读取未定义的属性'username',审查模式中的作者用户名与用户模式中的用户名冗余?我认为您应该像这样引用用户:作者:{type:mongoose.Schema.ObjectId,ref:'User'}然后一定要像上面所说的那样填充评论,并用review.author.usernameMael引用该字段。你是对的。它确实不会对代码做太多更改,但会让它更清楚。我填充评论,但仍然犯了同样的错误。我重写了一百万次代码,仍然不知道这里有什么问题。。。
//Review New

router.get("/new",  middleware.isLoggedIn, function(req, res){

    // find campground by id

    console.log(req.params.id);



 User.findById(req.params.id).populate('reviews').exec( function(err, user)

     { 

        if(err){

            console.log(err);

        } else {

             res.render("reviews/new", {user: user});

        }

    })
router.get("/:id", function(req, res) {
  User.findById(req.params.id).populate("reviews").exec(function(err, foundUser) {
    if(err) {
      req.flash("error", "Something went wrong.");
      return res.redirect("/");
    }
    console.log(foundUser);
    Post.find().where('author.id').equals(foundUser._id).exec(function(err, posts) {
      if(err) {
        req.flash("error", "Something went wrong.");
        return res.redirect("/");
      }
      res.render("users/show", {user: foundUser, posts: posts});
    })
  });
});