首页 > 解决方案 > 更新的 API 在本地工作,但在 Heroku 上不起作用,即使它使用更新的代码

问题描述

我正在重新访问一个旧的笔记项目,并更新了来自发布请求的响应,以包含新笔记的 id,而不是像以前那样只是一条带有“已创建新笔记”的消息。我将更改推送到 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 的图片

heroku 部署消息的图片

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

标签: node.jsexpressherokuknex.jsheroku-postgres

解决方案


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


推荐阅读