因此,我按照书架上的指南,使用书籍和摘要示例创建了一个简单的一对一关系。因此,我创建了如下的图书模型:
const dbConfig = require('../data/db');
const bookshelf = require('bookshelf')(dbConfig)
const Book = bookshelf.model('Book', {
tableName: 'books',
summary() {
return this.hasOne('Summary')
}
})
module.exports = Book
我按照以下内容创建了摘要模型:
const dbConfig = require('../data/db');
const bookshelf = require('bookshelf')(dbConfig)
const Summary = bookshelf.model('Summary', {
tableName: 'summaries',
book() {
return this.belongsTo('Book')
}
})
module.exports = Summary
为了进行测试,我创建了一些种子,将一些项目插入数据库。所以我可以用这个做一些测试。
exports.seed = async function(knex) {
// Deletes ALL existing entries
await knex('books').del()
await knex('books').insert([
{id: 1, name: 'A series of unfortunate events'},
{id: 2, name: 'Sherlock Holmes'},
{id: 3, name: 'Harry potter'}
]);
await knex('summaries').del()
await knex('summaries').insert([{ id:1,details:'This is a really funny book. you gotta read this by lemony snicket',book_id:1
},
{ id:2,details:'This is a really witty and intelligent book of holmes. He is an amazing detective after all. written by sir arthur conan doyale',book_id:2
},
{ id:3,details:'This is a written by jk rowling',book_id:3
}
])
};
我正在使用快捷路线转到特定页面。当我在没有任何复杂查询的情况下执行fetchAll时,它会返回所有内容。但当我试图从书中只获取一个特定的摘要id时,它似乎不起作用。
在v1/routes/summaryRoutes.js 中
const express = require('express')
const router=express.Router()
const Summary = require('../../model/summary')
router.get('/',async(req,res)=>{
let books = await new Summary({id:1}).fetch({withRelated: ['books']})
.then(function(){
res.json(books.toJSON());
})
.catch(Summary.NotFoundError,function(err){
res.send('empty response. :/');
console.log('caught unhandled exception.. so happy :) ')
console.log(err)
});
})
module.exports = router
我一直得到以下错误代码:
错误:没有在模型上定义图书。在EagleRelation。(C:\Users\bitcot\work\nodejs\node_modules\bookforf\lib\base\areacher.js:50:15)在EagleRelation.tryCatcher(C:\Users\bitcot\work\nodejs\node_modules\bluebird\js\release\util.js:16:23)在EagleRelation.fetch(C:\Users\bitcot\work\nodejs\node_modules\bluebird\js\release\method.js:15:34)在Child_handleEagle(C:\Users\bitcot\work\nodejs\node_modules\bookfor\lib\model.js:1526:56)
这个错误看起来像是一个简单的打字错误。它基本上是告诉您,当您尝试通过withRelated
获取Summary
模型时,在该模型上没有名为books
的关系。
您已将Summary
模型上的关系定义为book
const Summary = bookshelf.model('Summary', {
tableName: 'summaries',
book() {
return this.belongsTo('Book')
}
})
然而,当您试图获取此关系时,您将其称为books
(作为s
)
{withRelated: ['books']}
由于这看起来是一对多的关系,我认为单数版本是正确的,所以你只需要将你的withRelated
更改为book
,你就应该很好。