Обновленный API работает локально, но не в Heroku, даже если он использует обновленный код
Я возвращаюсь к старому проекту создания заметок и обновляю ответ на запрос публикации, чтобы включить идентификатор новой заметки, а не просто сообщение с "созданной новой заметкой", как раньше. Я перенес изменения в github, и автоматическая сборка heroku прошла успешно.
Моя проблема в том, что я получаю правильный ответ {id: 'id', message: 'message'}
когда я тестирую API локально, но heroku дает мне старый ответ {message: 'message'}
как его использование более старой версии API. Там нет плохих статусов или сообщений об ошибках, и сборка использует новейший код из git, насколько я знаю. Есть идеи, почему это происходит? Я чувствую, что могу упустить что-то очевидное.
Обновленный вызов API выглядит следующим образом:
server.post('/api/notes', (req, res) => {
const note = req.body;
knex
.insert(note)
.into('notes')
.then(response => {
res
.status(201)
.json({ id: response[0], message: 'New note successfully created' });
})
.catch(err => {
res.status(500).json({ message: 'Error creating note' });
});
});
Старый код такой же, за исключением того, что у ответа json нет свойства id.
Также просто для того, чтобы показать, что heroku использует последний код:
Картинка с герою развернуть сообщение
ОБНОВЛЕНИЕ: Поэтому я сделал небольшие изменения, чтобы проверить, и они действительно обновляются. Я сделал console.log и понял, что переменная response[0] печатает как неопределенная из журналов heroku, но она печатает очень хорошо локально. Я понятия не имею, что может быть причиной этого.
2 ответа
Итак, я действительно решил проблему. Оказывается, мне нужно было отредактировать мой .insert(note)
позвоните, чтобы выглядеть так .insert(note, ['id'])
а затем отправить JSON как {id: response[0].id, message: ''}
, Локальный ответ возвращал идентификатор и на героку он возвращал что-то совершенно другое. Я также понял, что локальная база данных, которую я использовал, была sqlite3, а heroku использует postgres. Я предполагаю, что возвращаемая переменная ответа отличается при использовании одного или другого.
Не решает вашу проблему, но может помочь в отладке: вы можете установить CLI heroku: https://devcenter.heroku.com/articles/heroku-cli и войти на сервер с помощью heroku run bash -a <appname>
, Вы можете проверить, загружен ли правильный код, версия вашего узла и версия рассматриваемых узловых модулей.