我最近部署了我的第一个项目,一个MERN堆栈到Heroku。然而,在部署之后,我遇到了开发中没有的问题。对我的web功能的一个简单解释是,它从mongoDB获取数据,并允许用户添加多个过滤器来搜索它们。它还具有允许您创建新数据和编辑旧数据的功能。我遇到的问题是,所有带有POST的函数都不能工作,它们会激发,但它会在Network dev工具中的XMLHttpRequest.p.onError(xhr.js:84)中出现错误“net::err_connection_referend”和“editinfo.jsx:58 error:Network error at e.exports(createerror.js:16)”。然而GET工作得很好,这意味着我动态生成的表可以工作,但我不能生成新的数据或编辑以前的数据(作为附带说明,我不能生成用于编辑的数据,尽管我能够为以前提到的表生成相同的数据。我认为这是因为我要求通过post获取数据,并且通过GET获取表)。我认为问题不是MongoDB的,因为GET正在工作,所以我猜测我需要做一些配置以允许post到我的服务器。我将贴出一些函数的工作和一些不。任何帮助或领导将非常感谢,谢谢。
这里有一个工作的:客户端
useEffect(() => {
fetch("/data").then(res => {
if(res.ok) {
return res.json();
} else {
console.error("Cannot asscess data")
}
})
.then(jsonRes => setData(jsonRes))
setError(0)
setShowError(false)
// eslint-disable-next-line react-hooks/exhaustive-deps
},[resetData])
这是服务器
router.route("/data").get((req,res) => {
Disease.find({}, async(err, foundDisease) => {
if(err) {
console.error(err)
} else {
foundDisease.sort(function(a, b){
var nameA=a.diseaseName.toLowerCase(), nameB=b.diseaseName.toLowerCase();
if (nameA < nameB) //sort string ascending
return -1;
if (nameA > nameB)
return 1;
return 0;
});
res.json(foundDisease);}
})
})
这里有一个不起作用:
这里是客户端(我使用post获取数据,因为我需要发送我需要的信息的id)
useEffect(() => {
const idInfo = {id};
axios.post('http://localhost:3001/info', idInfo)
.then(function(res){
setInput({
diseaseName: res.data[0].diseaseName,
species: res.data[0].species,
vector: res.data[0].vector,
vectorName: res.data[0].vectorName,
agent: res.data[0].agent,
agentName: res.data[0].agentName,
symptoms: res.data[0].symptoms,
diagnosis: res.data[0].diagnosis,
treatment: res.data[0].treatment,
prognosis: res.data[0].prognosis,
notes: res.data[0].notes
})
res=null
})
.catch(err => console.error(err))
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
这是服务器
router.route("/info").post((req, res) => {
console.log(req.body)
const idInfo = req.body.id;
console.log(idInfo);
current_id = idInfo;
Disease.find({_id: current_id})
.then(foundId => res.json(foundId))
.catch(err => console.error(err));
})
axios.post('localhost:3001/info',idInfo)
您将发布到localhost,而不是实际部署的服务器。您应该将它更改为一个环境变量,或者只是将您的heroku地址放在那里