Обновленный 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 использует последний код:

рис последнего git commit

Картинка с герою развернуть сообщение

ОБНОВЛЕНИЕ: Поэтому я сделал небольшие изменения, чтобы проверить, и они действительно обновляются. Я сделал 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>, Вы можете проверить, загружен ли правильный код, версия вашего узла и версия рассматриваемых узловых модулей.

Другие вопросы по тегам