簡體   English   中英

在Express中使用貓鼬人口

[英]using mongoose population in Express

使用人口在模式中添加數據的例子很多

但是如何在Express中使用它,包括評估現有數據和錯誤處理? 我已經創建了一個用戶,但是現在我想向現有用戶添加日志。

這是我的架構:

 const logSchema = new Schema({ logTitle: String, postedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' } }); const userSchema = new Schema({ _id: Schema.Types.ObjectId, firstName: { type: String, required: true } }); mongoose.model('User', userSchema); mongoose.model('Logs', logSchema); 
盡管有很多好的例子,我還是迷失了方向。 在良好的Express代碼中很難使用漂亮的示例

 const mongoose = require('mongoose') const Log1 = mongoose.model('Logs'); const logCreate = function (req, res) { const userid = req.params.userid; Log1.create({ logTitle: req.body.logTitle, postedBy: userid._id }); module.exports = {logCreate }; 

我是否首先在“日志”中創建新日志,然后評估現有用戶? 有人可以向我推動正確的方向嗎? 提前致謝

您必須將一個objectid添加到postedBy字段。 假設您有以下路線:

router
  .route('/logs/')
  .get(ctrlLogs.logsGetAll)
  .post(ctrlLogs.logsAddOne);

router
  .route('/logs/:logid')
  .get(ctrlLogs.logsGetOne);

然后,我們可以將控制器功能定義為(這是ctrlLogs ):

const mongoose = require('mongoose');
const Log = mongoose.model('Log');

module.exports.logsAddOne = (req, res) => {
  Log.create({
    logTitle: req.body.logTitle,
    postedBy: req.body.postedBy
  }, (err, newLog) => {
    let response = {};
    if (err) response = { status: 500, message: err };
    else response = { status: 201, message: newLog };

    return res.status(response.status).json(response.message);
  });
};

module.exports.logsGetAll = (req, res) => {
  Log
    .find({})
    .populate('postedBy')
    .exec((err, logs) => {
      let response = {};
      if (err) response = { status: 500, message: err };
      else if (!logs) response = { status: 404, message: [] };
      else response = { status: 200, message: logs };

      return res.status(response.status).json(response.message);
    });
};

module.exports.logsGetOne = (req, res) => {
  Log
    .findById(req.params.logid)
    .populate('postedBy')
    .exec((err, log) => {
      let response = {};
      if (err) response = { status: 500, message: err };
      else if (!log) response = { status: 404, message: `Log with id ${req.params.logid} not found.` };
      else response = { status: 200, message: log };

      return res.status(response.status).json(response.message);
    });
};

為了簡潔起見,我刪除了很多空格和花括號。 你也應該不會直接從價值創造的東西req.body或直接查詢與req.params.logid ; 必須先驗證這些值。 您可以使用諸如express-validator之類的庫進行驗證。

通過使用以下請求正文將請求發布到/ logs可以看到:

{
    "logTitle": "test log 32",
    "postedBy": "5a2d1ec83ef998431c726dfc"
}

我們將創造一個id為5a2d1ec83ef998431c726dfc用戶設置為postedBy用戶日志。 如果我得到/ logs / 5a2d240c66d7b473a0aa6ec8 (新日志), 則會得到:

{
    "_id": "5a2d240c66d7b473a0aa6ec8",
    "logTitle": "test log 32",
    "postedBy": {
        "_id": "5a2d1ec83ef998431c726dfc",
        "firstName": "test",
        "__v": 0
    },
    "__v": 0
}

我們可以看到,填充的日志也返回了用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM