javascript - 将数据发布到 Heroku 上的 Postgres 数据库后,React App 页面刷新到错误页面
问题描述
1. 总结问题
GitHub 仓库:https ://github.com/JorySmith/feature-request-tracker
GitHub 直播项目:https ://jorysmith.github.io/feature-request-tracker/
这是一个简单的特征跟踪器应用程序,React 前端部署在 GitHub 页面上,Node/Postgress 后端部署在 Heroku 上。
在输入字段中输入新功能描述并单击“添加”后,新功能请求会正确发布到我的 Heroku Postgres 数据库中。但是,页面刷新为“https://jorysmith.github.io/”,我收到 404 错误,“这里没有 GitHub Pages 站点。”
编辑和删除数据库中已有的功能也会出现同样的问题。PUT、POST 和 DELETE 可根据需要更改数据库,但页面刷新为“https://jorysmith.github.io/”
2. 描述你尝试过的东西
我在 onSubmitForm 函数中添加了一个e.preventDefault
and :window.location = '/'
import React, { Fragment, useState } from "react";
const InputFeature = () => {
const [description, setDescription] = useState("")
const onSubmitForm = async (e) => {
e.preventDefault();
try {
const body = { description }
const response = await fetch("https://feature-request-tracker-api.herokuapp.com", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body)
})
window.location = '/'
} catch (err) {
console.error(err.message)
}
}
return (
<Fragment>
<h1 className="text-center mt-5">Feature Request Tracker</h1>
<h3 className="text-center mt-1">A React CRUD App</h3>
<form className="d-flex mt-5" onSubmit={onSubmitForm}>
<input type="text" className="form-control" value={description} onChange={e => setDescription(e.target.value)} />
<button className="btn btn-success">Add</button>
</form>
</Fragment>
)
}
export default InputFeature
我还将 GET 和 POST 的端点更改为“/”,将 PUT 和 DELETE 的端点更改为“/:id”:
// Add a feature request
app.post("/", async (req, res) => {
try {
const { description } = req.body
const newFeature = await pool.query(
"INSERT INTO featurerequest (description) VALUES ($1) RETURNING *",
[description]
)
res.json(newFeature.rows[0])
} catch (error) {
console.error(error.message)
}
})
// Get one feature request
app.get("/:id", async (req, res) => {
try {
const { id } = req.params;
const feature = await pool.query(
"SELECT * FROM featurerequest WHERE feature_id = $1",
[id])
res.json(feature.rows[0])
} catch (error) {
console.error(error.message)
}
})
// Update one feature request
app.put("/:id", async (req, res) => {
try {
const { id } = req.params
const { description } = req.body
const updateFeature = await pool.query(
"UPDATE featurerequest SET description = $1 WHERE feature_id = $2",
[description, id]
)
res.json("Feature was updated.")
} catch (error) {
console.error(error.message)
}
})
// Delete one feature request
app.delete("/:id", async (req, res) => {
try {
const { id } = req.params
const deleteFeature = await pool.query(
"DELETE FROM featurerequest WHERE feature_id = $1",
[id]
)
res.json("Feature was deleted.")
} catch (error) {
console.error(error.message)
}
})
解决方案
感谢 Lakshman,他指出要添加到我的 index.html:
<base href="%PUBLIC_URL%/">
我还必须更改window.location = '/'
为window.location = '/feature-request-tracker/'
使用它的地方。
推荐阅读
- python - 如何在 Python 中准确获取币安 API 价格?
- angular - 如何将我的 Angular 4 产品专门迁移到 Angular 7 程序而不是最新的程序
- quickbooks - 使用 Consolibyte Quickbooks Web 连接器,我如何将两套书籍分开?
- r - 比较 ggplot2 中的多个 lm() 结果
- ruby-on-rails - Rails 和 Postgres 查询存储在 UTC 中的记录问题;应用时区为 UTC,但未找到记录
- powerbi - 将历史数据与横截面数据相结合
- acumatica - 如何使用 REST API 将文件附加到电子邮件
- javascript - 无法获取数组的长度,并且 map() 不适用于该数组
- azure-devops - azure devops 免费层能否与免费托管代理并行运行自托管作业?
- amazon-web-services - 即使ELB本身报告后端服务器健康,浏览器是否也会缓存ELB的503状态?