Обновленный API работает локально, но не в Heroku, даже если он использует обновленный код - PullRequest
0 голосов
/ 26 декабря 2018

Я возвращаюсь к старому проекту создания заметок и обновлял ответ от запроса на публикацию, чтобы включить идентификатор новой заметки, а не просто сообщение с «новой заметкой, созданной», как раньше.Я перенес изменения в 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 нет идентификатора'property.

Также просто для того, чтобы показать, что heroku использует последний код:

рис последнего комита git

рис развертывания herokuсообщение

ОБНОВЛЕНИЕ: Итак, я внес небольшие изменения в тест, и они действительно обновляются.Я сделал console.log и понял, что переменная response [0] печатает как неопределенная из журналов heroku, но она печатает очень хорошо локально.Я понятия не имею, что может быть причиной этого.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Хорошо, так что я действительно решил проблему.Оказывается, мне нужно было отредактировать мой .insert(note) вызов, чтобы он выглядел следующим образом .insert(note, ['id']), а затем отправить json как {id: response[0].id, message: ''}.Локальный ответ возвращал идентификатор и на героку он возвращал что-то совершенно другое.Я также понял, что локальная база данных, которую я использовал, была sqlite3, а heroku использует postgres.Я предполагаю, что возвращаемая переменная ответа отличается при использовании одного или другого.

0 голосов
/ 26 декабря 2018

Не решает вашу проблему, но может помочь в отладке: Вы можете установить CLI heroku: https://devcenter.heroku.com/articles/heroku-cli и войти на сервер с помощью heroku run bash -a <appname>.Вы можете проверить, загружен ли правильный код, версия вашего узла и версия рассматриваемых узловых модулей.

...