在Express

时间:2017-12-10 09:23:27

标签: node.js express mongoose

使用人口

在Schemas中添加数据有很多很好的例子

但是如何在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代码中使用nice examples很难。

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
};

我首先在“日志”中创建一个新日志,然后评估现有用户吗?有人能帮我推动正确的方向吗?提前致谢

1 个答案:

答案 0 :(得分:0)

您必须在postedBy字段中添加一个objectid。假设您有以下路线:

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
}

我们可以看到填充的日志也会返回用户。