Проблема с отображением данных с помощью mongodb - PullRequest
0 голосов
/ 03 мая 2018

У меня есть веб-приложение, в котором пользователи могут публиковать записи, и оно возвращает его в виде таблицы. Но я хочу создать раздел, где пользователь может просматривать свои индивидуальные представления. У меня первая часть работает правильно. И это действительно показывает список пользовательских элементов. Тем не менее, когда я пытаюсь просмотреть только один человек, данные не отображаются. Когда я получаю console.log, я получаю свои пользовательские данные, но я не получаю данные об элементе. Данные элемента просто возвращают пустой массив. Я не уверен, что все, что мне нужно для публикации здесь, но я собираюсь показать и схемы, и маршрут для перечисления данных.

UserSchema:

const UserSchema = new mongoose.Schema({
  username: {
    type: String,
    trim: true,
    unique: true,
    required: true,
    minlength: 3,
    maxlength: 15
  },
  firstName: {
    type: String,
    required: true,
    minlength: 3,
    maxlength: 15
  },
  lastName: {
    type: String,
    required: true,
    minlength: 3,
    maxlength: 15
  },
  email: {
    type: String,
    unique: true,
    required: true
  },
  items: [
    {
      type: mongoose.Schema.Types.ObjectId,
      ref: "Items"
    }
  ],
  isAdmin: {
    type: Boolean,
    default: false
  }
});

UserSchema.plugin(passportLocalMongoose);

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

ItemSchema:

const ItemSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    minlength: 3,
    maxlength: 20
  },
  description: {
    type: String,
    required: true
  },
  price: {
    type: Number,
    required: true
  },
  image: String,
  noImage: String,
  createdAt: {
    type: Date,
    default: Date.now
  },
  createdBy: {
    id: {
      type: mongoose.Schema.Types.ObjectId,
      ref: "User"
    },
    username: String
  }
});

module.exports = mongoose.model("Items", ItemSchema);

Маршрут:

router.get("/:id", middleware.isLoggedIn, function(req, res) {
  User.findById(req.params.id, function(err, foundUser) {
    if (err || !foundUser) {
      req.flash("error", "Something went wrong");
      res.render("index");
    } else {
      Item.find()
        .where("creadtedBy.id")
        .equals(foundUser._id)
        .exec(function(err, items) {
          if (err || !foundUser) {
            req.flash("error", "Something went wrong");
            res.render("index");
          }
          console.log("user" + foundUser);
          console.log("items" + items);
          res.render("inventory", {
            user: foundUser,
            items: items
          });
        });
    }
  });
});

Итак, что я здесь не так делаю? ... Спасибо

Вот маршрут, соединяющий пользователя с элементом:

router.post("/item/add", middleware.isLoggedIn, (req, res) => {
  User.findById(req.user._id, (err, user) => {
    upload(req, res, err => {
      if (err) {
        req.flash("error", "error uploading image");
        return res.redirect("back");
      }
      var name = req.body.name;
      if (typeof req.file !== "undefined") {
        var image = "/uploads/" + req.file.filename;
      } else {
        image = "/uploads/no-img.PNG";
      }
      var description = req.body.description;
      var price = req.body.price;
      var createdBy = { id: req.user._id, username: req.user.username };
      var newItem = {
        name: name,
        image: image,
        description: description,
        price: price,
        createdBy: createdBy
      };
      Item.create(newItem, (err, newlyCreated) => {
        if (err) {
          return console.log(err);
        } else {
          user.items.push(newlyCreated);
          user.save();
          res.redirect("/products");
        }
      });
    });
  });
});

А вот моя информация от пользователя mongo:

{
    "_id" : ObjectId("5aea79207c1f272d186ab97a"),
    "items" : [
            ObjectId("5aea793b7c1f272d186ab97b")
    ],
    "isAdmin" : true,
    "username" : "testuser",
    "firstName" : "Test",
    "lastName" : "User",
    "email" : "test@user.com",
    "__v" : 1
 }

А вот данные товара из монго:

{
    "_id" : ObjectId("5aea793b7c1f272d186ab97b"),
    "createdBy" : {
            "id" : ObjectId("5aea79207c1f272d186ab97a"),
            "username" : "testuser"
    },
    "name" : "Test",
    "image" : "/uploads/no-img.PNG",
    "description" : "Item",
    "price" : 1,
    "createdAt" : ISODate("2018-05-03T02:51:39.818Z"),
    "__v" : 0
}
...