使用MERN Stack构建应用程序并为用户的 items 完成了一个简单的CRUD API之后,我想向用户模型添加' categories '属性然后他可以将其添加到他的项目中...
为了解释该应用程序,我计划在将每个用户的数据发布到MongoDB时附加一些默认数据,即类别。不幸的是,我无法将这些类别“发布”到数据库中。
这是我尝试过的不同请求和架构组合
用户路线
const User = require("../models/User")
// @route POST api/users
// @desc Regiter a user
// @access Public
router.post(
"/",
[
check("name", "Please add name")
.not()
.isEmpty(),
check("email", "Please include a valid email").isEmail(),
check(
"password",
"Please enter a password with 6 or more characters"
).isLength({ min: 6 })
],
async (req, res) => {
const errors = validationResult(req)
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() })
}
const { name, email, password } = req.body
console.log(categories)
try {
let user = await User.findOne({ email })
if (user) {
return res.status(400).json({ msg: "User already exists" })
}
user = new User({
name,
email,
password,
})
const salt = await bcrypt.genSalt(10)
user.password = await bcrypt.hash(password, salt)
await user.save()
const payload = {
user: {
id: user.id
}
}
jwt.sign(
payload,
config.get("jwtSecret"),
{
expiresIn: 360000
},
(err, token) => {
if (err) throw err
res.json({ token })
}
)
} catch (err) {
console.error(err.message)
res.status(500).send("Server Error")
}
}
)
module.exports = router
AuthState中的请求
// Register User
const register = async formData => {
console.log(formData)
const expandedFormData = {
...formData,
categories: [
{ name: "Testcategory1", test: 1 },
{ name: "Testcategory2", test: 2 }
]
}
const config = {
headers: {
"Content-Type": "application/json"
}
}
try {
const res = await axios.post("/api/users", expandedFormData, config)
console.log(expandedFormData)
dispatch({
type: REGISTER_SUCCESS,
payload: res.data
})
loadUser()
} catch (err) {
dispatch({
type: REGISTER_FAIL,
payload: err.response.data.msg
})
}
}
模式
const mongoose = require("mongoose")
const categorieSchema = mongoose.Schema({
label: String,
test: Number
})
const UserSchema = mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true
},
date: {
type: Date,
default: Date.now
},
categories: [categorieSchema]
})
module.exports = mongoose.model("user", UserSchema)
2。 AuthState中的请求
....
const expandedFormData = {
...formData,
categories: [{ name: "Testcategory1" }, { name: "Testcategory2" }]
}
....
模式
....
categories: [
{
name: String
}
]
....
3。 AuthState中的请求
模式
与2相同。
....
categories: [
{
name: {
type: String
}
}
]
....
4。 请求
模式
与2相同。
....
categories: [String]
....
我也阅读了这些线程,但是它们没有提供新信息: -Mongoose schema array of objects -Save arrays in Mongoose schema
可以在https://github.com/mortizw/Repio-2.0上查看完整的应用程序 除了关于如何使该模型正常工作的一些想法外,我很乐意提供有关如何通过控制台日志记录某些东西来迭代测试/处理“模式问题”的一些技巧。
答案 0 :(得分:0)
创建new User
时,您没有传递Categories
,这就是为什么它没有被保存的原因。
首先,此架构将正常运行
categories: [
{
name: {
type: String
}
}
]
然后您需要将user route
更新为此
const { name, email, password,categories } = req.body
user = new User({
name,
email,
password,
categories
})
还要确保您只通过前端类别中的name
,因为您的架构只有name
。
您的前端应该是这样
const expandedFormData = {
...formData,
categories: [
{ name: "Testcategory1"},
{ name: "Testcategory2"}
]
}