[英]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);
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.