我正在重新研究旧的笔记记录项目,并更新了来自发布请求的响应,以包括新笔记的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使用的是最新代码:
更新:因此,我对测试进行了一些小的更改,实际上它们确实得到了更新。我做了一个console.log并意识到在heroku日志中,response [0]变量的打印结果是未定义的,但它在本地打印得很好。我不知道是什么原因造成的。
答案 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版本。