部署到 Netlify 后无法从后端获取数据

Posted

技术标签:

【中文标题】部署到 Netlify 后无法从后端获取数据【英文标题】:Can not get data from backend after deploying to Netlify 【发布时间】:2022-01-23 09:09:26 【问题描述】:

我有一个 Mern 堆栈项目。它在本地主机中工作。部署到 netlify 后,我的前端出现错误。

函数报错。

       axios.get('/api/getbouquets').then((response)=>
           const data = response.data;
           setBouquets(data);
           setHomeProducts(homeProducts => [...homeProducts, data[0]]);
       ).catch(()=>
           console.log("data could not fetch from server side")
       );

这是我在前端的 package.json。我使用代理连接到后端。


 "name": "flower-shop-v4",
 "version": "0.1.0",
 "private": true,
 "proxy": "http://localhost:8080",
 "dependencies": ...


这是我在后端的 server.js

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config()

// Accessing the path module
const path = require("path");

const app = express();
app.use(cors());

const PORT = process.env.PORT || 8080;

const routes = require("./routes/api");

mongoose.connect( process.env.MONGODB_STRING,
    useNewUrlParser: true,
    useUnifiedTopology: true
)

mongoose.connection.on('connected', ()=>
    console.log('Mongoose is connected!');
)

app.use(express.json());
app.use(express.urlencoded( extended: false));

app.use("/api", routes);


app.use(express.static(path.join(__dirname, '/client/build')))
app.get('/*', (req,res)=>
    res.sendFile(path.join(__dirname, 'client', 'build', 'index.html'));
)


app.listen(PORT, console.log(`Server is starting at $PORT`));

此项目在 Heroku 中使用这些设置运行。但它不适用于netlify。顺便说一句,我查看了 MongoDB 的白名单。所有IP都在白名单中。这个问题不是因为这个。

编辑 1:

context.js:44 是我的错误。 context.js:39 是response.dataresponse.data 是我的 index.html,因为我在公用文件夹中使用了 _redirects。

_重定向

/* /index.html 200

我意识到这很愚蠢。删除重定向后,前端尝试从后端获取数据时出现 404 错误。因为它们彼此没有联系。如何连接它们?

【问题讨论】:

看起来您正在 Home.js 中的某个数组上切片和使用地图,这可能是一个问题。除此之外,我建议检查response.data,因为承诺中的任何失败行都可以发送它来捕获。你也可以试试catch(e) => console.log(e)。分享这些控制台日志的输出 @boxdox 我做了他们并编辑了答案。正如你所说,由于切片方法的问题。我试过 if(boquets.length !== 0)..。但它不起作用。你有什么主意吗?顺便说一句,它仍在 heroku 上工作。 需要检查 Netlify 配置文件。因为你没有提到所以不能没有它。 【参考方案1】:

我从 netlify 支持中得到了答案。无法在 netlify deploy 中运行连接到 mongodb 的 server.js。要连接到 MongoDB,我必须使用 netlify 函数。

【讨论】:

以上是关于部署到 Netlify 后无法从后端获取数据的主要内容,如果未能解决你的问题,请参考以下文章

领域:删除过时的对象

部署在 Netlify 上的 Gatsby 站点未更新来自 graphcms 的数据

如何使用 bloc 未来获取流从后端过滤数据?

如果你有 apollo react 钩子从后端获取数据,你如何使用 nextjs 进行服务器端渲染?

前端通过ajax获取base64转blob下载PDF方法

Netlify 和 ngrok 链接