提问者:小点点

Express Server-不能POST但可以GET,mongoDB问题还是后端服务器问题?


我最近部署了我的第一个项目,一个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));
        
})

共1个答案

匿名用户

axios.post('localhost:3001/info',idInfo)

您将发布到localhost,而不是实际部署的服务器。您应该将它更改为一个环境变量,或者只是将您的heroku地址放在那里