问题描述
我正在执行 tutorials in the loopback documentation,因为我在 todo-list
教程的最后阶段遇到了问题,当时我想将应用程序连接到数据库(Postgresql,如教程中所述)。>
我已通过执行 lb4 example todo-list
来初始化应用程序,然后我已按照 https://loopback.io/doc/en/lb4/todo-list-tutorial-sqldb.html 中给出的说明进行操作。
我没有忘记做npm run migrate -- --rebuild
,在数据库中很好地创建了表。桌子是空的。
当我POST /todo-lists
(使用 http://localhost:3000/explorer/#/TodoListController/TodoListController.create)使用这个主体时
{ "title": "grocery list" }
我知道答案
{
"error": {
"statusCode": 500,"message": "Internal Server Error"
}
}
我在控制台中有这个日志
npm start
...
Server is running at http://[::1]:3000
Request POST /todo-lists Failed with status code 500. error: null value in column "id" of relation "todolist" violates not-null constraint
at Parser.parseErrorMessage (C:\Users\azias\Documents\dev\js\loopback4-example-todo-list\node_modules\pg-protocol\dist\parser.js:278:15)
at Parser.handlePacket (C:\Users\azias\Documents\dev\js\loopback4-example-todo-list\node_modules\pg-protocol\dist\parser.js:126:29)
at Parser.parse (C:\Users\azias\Documents\dev\js\loopback4-example-todo-list\node_modules\pg-protocol\dist\parser.js:39:38)
at Socket.stream.on (C:\Users\azias\Documents\dev\js\loopback4-example-todo-list\node_modules\pg-protocol\dist\index.js:10:42)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
据我所知,所提到的 id
不是自动生成的(我想应该是),因此丢失了。
我正在发现环回,所以我不知道我必须改变什么才能使其正常工作。
解决方法
我想我终于找到了。
在所有模型中,id 被定义为具有设置 generated: false
的属性,它必须更改为 generated: true
。这使得在数据库中生成序列并自动生成id。
例如,在todo-list.model.ts
中,代码
@property({
type: 'number',id: true,generated: false,})
id?: number;
必须改为
@property({
type: 'number',generated: true,})
id?: number;
(在 todo-list-image.model.ts
和 todo.model.ts
中相同)