我正在使用mongodb为node.js的快速应用程序创建REST API。
我创建了三种不同的方案,它们在某种程度上相互关联,例如,一本书是由一个作者写的,由一个出版商出版。下面是方案这本书。
const mongoose = require('mongoose')
const bookSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
author: {
type: {type: mongoose.Schema.Types.ObjectId, ref: 'Author'},
},
publisher: {
type: {type: mongoose.Schema.Types.ObjectId, ref: 'Publisher'},
},
isbn: {
type: String,
required: true
},
})
module.exports = mongoose.model('Book', bookSchema)
每个方案都有一个id,但我使用的是发布对象时生成的默认id。
这是路由文件的一部分.
//Creating one Book
router.post('/', async (req, res) => {
const book = new Book({
title: req.body.title,
author: req.body.author.findById,
publisher: req.body.publisher.findById,
isbn: req.body.isbn
})
try {
const newBook = await book.save()
res.status(201).json(newBook)
} catch {
res.status(400).json({message: err.message})
}
})
我正在使用。测试文件.
###
POST http://localhost:3000/books
Content-Type: application/json
{
"title" : "test",
"author" : "615c429dfe31a3863b6ebc8e", //object_id of an author in the db
"publisher" : "615f3daf330081bcd5010861", //object_id of a publisher in the db
"isbn" : "1234"
}
当我运行这条语句时,它将创建一个包含object_id、标题和isbn的对象。作者和出版商被遗漏了。我没有按照方案中的要求设置作者和发布者,因为它会抛出错误(未能将字符串强制转换为object_id)。我已经试过了。
谁能告诉我如何避免这种类型的错误?我已经在谷歌上搜索并观看了教程,但我还没有找到任何东西。谢谢。
Mongoose和MongoDB原生驱动有区别。Mongoose将自动将(Typecast)转换为模式中定义的类型。
你的schema看起来很好,你只需要像
那样修改它//Creating one Book
router.post('/', async (req, res) => {
const book = new Book({
title: req.body.title,
author: req.body.author,
publisher: req.body.publisher,
isbn: req.body.isbn
})
try {
const newBook = await book.save()
res.status(201).json(newBook)
} catch {
res.status(400).json({message: err.message})
}
})