所以我一直在努力向MongoDB发出POST请求,因为其中一个属性应该是一个对象数组。我一直在学习不同的教程,但仍然无法理解它。
我有一个数组,它是一个对象数组。
tagsArray = [
{ tag_name: "Tiger", ref: "t" },
{ tag_name: "Cheetah", ref: "c" }
];
我使用Fetch API发布它,因为它包含一个图像文件,我使用的是formData。这就是我发布它的方式......
let formData = new FormData();
formData.append('titleImage', this.state.titleImage);
for (var i = 0; i < tagsArray.length; i++) {
formData.append('tags', JSON.stringify(tagsArray[i]));
}
var request = {
body: formData,
method: "POST"
}
fetch("http://localhost:3500/posts", request)
.then(res => res.json())
.then(json => {
console.log("Post success:", json);
})
.catch(function(err) {
console.log(err.message);
});
继续,我已经创建了一个Schema,你可以在这里看到:
const mongoose = require('mongoose');
const tagSchema = mongoose.Schema({
tag_name: String,
ref: String
})
const postSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
titleImage: { type: String, required: true },
tags: { type: [tagSchema], required: true},
});
module.exports = mongoose.model('Post', postSchema);
这就是我一直试图将其保存到我的数据库的方式。
exports.create_post = (req, res, next) => {
const post = new Post({
_id: new mongoose.Types.ObjectId(),
titleImage: req.file.path,
tags: req.body.tags,
});
post.save().then(result => {
res.status(201).json({
post: {
_id: result._id,
tags: result.tags
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
}
这是控制台中记录的错误。
消息:'强制转换为数组失败“[ \ '{ “TAG_NAME”: “虎”, “REF”: “T”} \',\ n \'{“tag_name”:“猎豹”,“参考”:“c”} \']“在路径”标签“', 名称:'CastError', stringValue:'“[\'{”tag_name“:”Tiger“,”ref“:”t“} \',\ n \'{”tag_name“:”Cheetah“,”ref“:”c“} \' ]“”, 善良:'阵列', 值:[数组], 路径:'标签', 原因:[对象]}},_消息:'发布验证失败',名称:'ValidationError'}
答案 0 :(得分:0)
与往常一样,当我发布一个问题时,我的竞争精神和自我带来了新的活力和动力,这使我能够更专注并完成任务。所以这就是我解决问题的方法。
我改变了postSchema:
const postSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
titleImage: { type: String, required: true },
tags: { type: {tagName: String, tagRef: String}, required: true}
});
这里有一些配置,我将标记数组映射并将每个字符串转换为一个对象,以便我可以访问每个属性。
exports.create_post = (req, res, next) => {
const post = new Post({
_id: new mongoose.Types.ObjectId(),
titleImage: req.file.path,
tags: req.body.tags.map(tag => {
var tagObject = JSON.parse(tag);
return {
tagName: tagObject.tag_name,
tagRef: tagObject.ref
}
})
});
post.save().then(result => {
res.status(201).json({
post: {
_id: result._id,
tags: result.tags.map(tag => {
return {
tagName: tag.tagName,
tagRef: tag.tagRef
}
}),
}
});
})
.catch(err => {
console.log(err);
res.status(500).json({
error: err
});
});
}
不确定最佳解决方案是否适用于我。