Я делаю туториалы в петлевой документации у меня возникла проблема на последнем этапе 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
не генерируется автоматически (полагаю, должен быть) и поэтому отсутствует.
Я обнаруживаю петлю, поэтому я не знаю, что мне нужно изменить, чтобы она работала.
Я думаю, что наконец нашел.
Во всех моделях идентификатор был определен как свойство с настройкой generated: false
, его нужно изменить на generated: true
. Это позволяет создавать последовательности в базе данных и автоматически генерировать идентификатор.
Например, в todo-list.model.ts
код
@property({
type: 'number',
id: true,
generated: false,
})
id?: number;
нужно изменить на
@property({
type: 'number',
id: true,
generated: true,
})
id?: number;
(то же самое в todo-list-image.model.ts
и todo.model.ts
)