【问题标题】:data modules belongs to user MEANJS数据模块属于用户 MEANJS
【发布时间】:2015-08-08 12:15:09
【问题描述】:

我对 MEANJS 真的很陌生,经过几天的谷歌研究,我找不到一个好的方法和一个好的教程来学习如何制作一种属于用户的文章模块(如 MEANJS 入门中的模块)。

现在我的 crud 模块运行良好,但所有数据都显示给所有用户。我只是希望用户可以添加文章(这里是另一个名称,但无论如何)并且只有这个用户可以看到这篇文章。

我在这里找到了你的问题,你看起来已经实现了我正在尝试的一种方式。因此,如果您有任何提示或任何资源可以帮助我,我就起来了!当然,我已经阅读了关于人口的猫鼬文档部分,我确定就是这样,但仅此一项就很难了。我已经尝试链接我的用户模块和文章模块,但没有成功。

感谢您的宝贵时间,祝您编码愉快 :) 来自巴黎的问候。

【问题讨论】:

  • 如果我错了请纠正我,但据我了解,您只想允许用户创建一些实体(文章/帖子/等),因此每个用户可能会看到自己的(并且只有自己的)实体。如果是,您可以只创建像用户和文章这样的模式。在用户模型中,您需要添加类似“文章”字段的内容,您将在那里存储该用户的文章。 articles: [articleSchema] 用于数组或article: {type: mongoose.Schema.Types.ObjectId, ref: 'Article'} 用于单个对象。
  • Ty Roman 但我需要我的所有用户有很多文章。我知道我也可以在数组中定义我的文章 schema.object.id 并通过用户方案访问它,但我首先尝试在我的文章方案中输入用户 ID 并按 user._id == req 列出。用户。所以现在我想知道最佳做法是什么?

标签: meanjs


【解决方案1】:

如果您检查文章的 mongodb 条目,它已经拥有创建文章的用户 ObjectId:

> db.articles.find()
{ "_id" : ObjectId("55c7751dbafe1a306b6ce54d"), "user" : ObjectId("55c774f9bafe1a306b6ce54c"), "content" : "My latest test. another info", "title" : "Test", "created" : ISODate("2015-08-09T15:43:25.467Z"), "__v" : 0 }
{ "_id" : ObjectId("55c7c2edd4bc5f277b775ba9"), "user" : ObjectId("55c774f9bafe1a306b6ce54c"), "content" : "ATESTE", "title" : "TESTE", "created" : ISODate("2015-08-09T21:15:25.762Z"), "__v" : 0 }
> 

点击“列出文章”菜单项时加载所有文章的原因是因为articles.server.controller.js中文章的列表实现不限制查找仅加载登录的用户文章,默认实现从 mongodb 加载所有文章:

/**
 * List of Articles
 */
exports.list = function (req, res) {
  Article.find().sort('-created').populate('user', 'displayName').exec(function (err, articles) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.json(articles);
    }
  });
};

我从未尝试过,但我相信做你想做的最简单的方法是将调用更改为有一个标准并仅加载来自登录用户的文章,例如:

/**
 * List of Articles
 */
exports.list = function (req, res) {
  Article.find({user: req.user}).sort('-created').populate('user', 'displayName').exec(function (err, articles) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.json(articles);
    }
  });
};

这个,或者类似的东西(我没有测试过)现在应该只带来登录的用户创建的文章。查看mongoose查询详情here.

【讨论】:

  • 是的,这正是我所需要的。我已经为您尝试过,我可以确认这项工作。只是为了每个人,我只是将Article.find({user: req.user}) ... 更改为Article.find({'user': req.user}) ... 。用户需要单引号,因为我们引用了一个模式对象。无论如何,感谢您抽出时间 Marcos,现在我正在以正确的方式继续我在 MEANJS 中的编码生活。再次感谢和问候。
猜你喜欢
  • 2015-11-27
  • 2015-01-07
  • 1970-01-01
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
相关资源
最近更新 更多