更新的API在本地有效,但即使使用更新的代码也无法在Heroku上使用

时间:2018-12-25 23:49:23

标签: node.js express heroku knex.js heroku-postgres

我正在重新研究旧的笔记记录项目,并更新了来自发布请求的响应,以包括新笔记的ID,而不是像以前那样仅包含带有“已创建新笔记”的消息。我将更改推送到github,heroku自动部署构建成功。

我的问题是,在本地测试api时,我得到了{id: 'id', message: 'message'}的正确响应,但是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使用的是最新代码:

pic of latest git commit

pic of heroku deploy message

更新:因此,我对测试进行了一些小的更改,实际上它们确实得到了更新。我做了一个console.log并意识到在heroku日志中,response [0]变量的打印结果是未定义的,但它在本地打印得很好。我不知道是什么原因造成的。

2 个答案:

答案 0 :(得分:0)

好的,所以我实际上解决了这个问题。原来,我需要编辑.insert(note)调用以使其看起来像这样.insert(note, ['id']),然后将json作为{id: response[0].id, message: ''}发送。本地响应返回id,在heroku上返回完全不同的东西。我还意识到我使用的本地数据库是sqlite3,而heroku使用的是postgres。我猜测使用一个或另一个时返回的响应变量是不同的。

答案 1 :(得分:-1)

无法解决您的问题,但可能有助于调试: 您可以安装heroku CLI:https://devcenter.heroku.com/articles/heroku-cli,然后使用heroku run bash -a <appname>登录到服务器。您可以检查是否上传了正确的代码,您的节点版本以及相关的node_modules版本。