我正在尝试完成 Dave Grey 的 MERN 堆栈代码并在以下问题中运行:
我的 POST 请求卡在“Note.create”行,我从未收到回复。 Try catch 块不会抛出任何错误。
POST Method
const createNewNote = asyncHandler(async (req, res) => {
const { user, title, text } = req.body
// Confirm data
if (!user || !title || !text) {
return res.status(400).json({ message: 'All fields are required' })
}
console.log("Data Confirmed")
// Check for duplicate title
const duplicate = await Note.findOne({ title }).lean().exec()
if (duplicate) {
return res.status(409).json({ message: 'Duplicate note title' })
}
console.log("No duplicates")
// Create and store the new note
console.log("Starting creation")
const useruser = await User.findById(user).exec()
console.log(useruser)
const noteObject = {"user" : useruser._id, title, text}
const note = await Note.create(noteObject)
console.log("End of Note.create")
if (note) { // Created
return res.status(201).json({ message: 'New note created' })
} else {
return res.status(400).json({ message: 'Invalid note data received' })
}
})
这些分别是我的 User 和 Note 模式:
USER Schema
const mongoose = require('mongoose')
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true
},
password: {
type: String,
required: true
},
roles: [{
type: String,
default: "Employee"
}],
active: {
type: Boolean,
default: true
}
})
module.exports = mongoose.model('User', userSchema)
--------------------------------------------------------
//NOTE Schema
const mongoose = require('mongoose')
const AutoIncrement = require('mongoose-sequence')(mongoose)
const noteSchema = new mongoose.Schema(
{
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User',
},
title: {
type: String,
required: true
},
text: {
type: String,
required: true
},
completed: {
type: Boolean,
default: false
},
},
{
timestamps: true
}
)
noteSchema.plugin(AutoIncrement, {
inc_field: 'ticket',
id: 'ticketNums',
start_seq: 500
})
module.exports = mongoose.model('Note', noteSchema)
我的控制台记录直到: “发布/注释 数据确认 无重复 开始创作 { _id: new ObjectId("64440dcbf47f80931a244dd2"), 用户名:'DanD', 密码:'$2b$10$R7cbeKxN4d8wSNLtShZ4MOcwaNfdMApAdYDwYsVA2ofAfcUkju0fm', 角色:['管理员','所有者','经理'], 活跃:真实, __v: 0 } “ 此用户 ID 在我的 mongodb 数据库中,但我无法创建与关联用户的注释。我试图用谷歌搜索类似的问题,或者与 chatGPT 来回切换,但无济于事。
感谢您的宝贵时间!
repo 在 github 上公开但不起作用:https://github.com/gitdagray/mern_stack_course/blob/main/lesson_04/controllers/notesController.js
我尝试将不同类型的有效负载发送到端点,并采用“._id”方式直接从我尝试引用的对象中获取 id,但没有成功。
这是我的 json 有效负载,我正在使用 Postman: { “用户”:“64440dcbf47f80931a244dd2”, "title": "史密斯夫人的电脑", “文本”:“SSD 已关闭” }
根据您的
noteSchema
,您已经使用了user
const noteSchema = new mongoose.Schema(
{
user: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'User',
},
}
//...
)
所以,应该替换为
const noteObject = {user, title, text}
const note = await Note.create(noteObject)
因为它不包含在
noteSchema
和useruser
不能创建_id
属性。在这里,Note.create()
将仅通过知道它的模式键来创建笔记,就像您使用的user
.
我希望这有帮助。