gpt4 book ai didi

javascript - GET 请求返回 index.html 文档而不是 json 数据

转载 作者:行者123 更新时间:2023-12-03 06:55:55 27 4
gpt4 key购买 nike

将我的 mern 应用程序部署到 Heroku 后,GET主页请求('http://localhost:8000/post/')现在返回 index.html而不是 json data从请求中。我收到 200 status代码,但响应为 html .但是,它在本地工作正常。除了这个之外,所有其他请求都在工作。
每当我认为我已经修复它时,Heroku 都会在同一条路线上显示 json 数据而不是 UI。我假设这些问题是相关的。
我该如何解决这个问题?谢谢!
路线/ Controller - 列出帖子

router.get('/', (list)) 

exports.list = (req, res) => {
const sort = { title: 1 };
Post.find()
.sort(sort)
.then((posts) => res.json(posts))
.catch((err) => res.status(400).json("Error: " + err));
};
服务器.js
require("dotenv").config();

// import routes
...
const app = express();

// connect db - first arg is url (specified in .env)
const url = process.env.MONGODB_URI
mongoose.connect(url, {
useNewUrlParser: true,
useCreateIndex: true,
useUnifiedTopology: true,
useFindAndModify: false,
});
mongoose.connection
.once("open", function () {
console.log("DB Connected!");
})
.on("error", function (error) {
console.log("Error is: ", error);
});

// middlewares
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
next();
});

// middleware
...
// app.use(express.static(path.join(__dirname, './client/build')))
app.use(authRoutes);
app.use(userRoutes);
app.use('/post', postRoutes);

if (process.env.NODE_ENV === "production") {
app.use(express.static("client/build"));
}

app.get("/*", function (req, res) {
res.sendFile(path.join(__dirname, "./client/build/index.html"));
});

const port = process.env.PORT || 80;

app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
ListPosts.js
class ListPosts extends React.Component {
state = {
title: '',
body: '',
date: '',
posts: []
}

componentDidMount = () => {
this.getPosts()
}

getPosts = () => {
axios.get(`${API}/post`)
.then((response) => {
const data = response.data
this.setState({posts: [data]})
console.log(data)
})
.catch((error) => {
console.log(error)
})
}

displayPosts = (posts) => {
if (!posts.length) return null;
posts.map((post, index) => (
<div key={index}>
...
</div>
))
}


render() {
return (
<div>
{this.displayPosts(this.state.posts)}
</div>
)
}
}

export default ListPosts

最佳答案

您的要求 'http://localhost:8000/'匹配两个路由处理程序

app.get("/*", function (req, res) {
res.sendFile(path.join(__dirname, "./client/build/index.html"));
});
router.get('/', (list)) 
由于您的 客户端构建 路线位于 上方列表 route 它将始终返回 index.html,因为在定义路由时优先级很重要。
一个好的做法和解决方案是始终通过附加 /api 来区分您的 api 路由和静态路由。在所有路线之前如下
app.use('api/auth', authRoutes);
app.use('api/post', postRoutes);
app.use('api/user', userRoutes);

关于javascript - GET 请求返回 index.html 文档而不是 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64496815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com