使用人口
在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);
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
};
我首先在“日志”中创建一个新日志,然后评估现有用户吗?有人能帮我推动正确的方向吗?提前致谢
答案 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
}
我们可以看到填充的日志也会返回用户。