[英]ReactJS receiving empty array from NodeJS
我正在尝试将一些简单的数据从后端发送到 ReactJS API。 但是,ReactJS 似乎没有收到它。 ReactJS 只是收到一个空字符串。 这是两者的代码。 Node 运行在 3000 端口,React 运行在 4000 端口。
索引.js
const express = require("express")
const app = express()
const cors = require("cors")
const a = "Hello world"
// app.use(cors())
app.use(cors({
origin:"http://localhost:4000",
methods:"GET,HEAD,PUT,PATCH,POST,DELETE",
credentials:true
}))
app.use((req,res,next)=>{
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization")
})
app.get("/", (req,res)=>{
console.log("someone is here")
res.json({
data:a
})
})
app.listen(3000, ()=>{
console.log("Server is running")
})
主页.jsx
import React, { Component } from 'react'
import axios from 'axios'
class Homepage extends Component {
state = {
authenticated: false,
data:[]
};
componentDidMount(){
const url = "http://localhost:3000/"
axios.get(url)
.then(r=>{
console.log(r.json())
return r.json()
})
.then(data=>this.setState({data}))
console.log(this.state.data)
}
render() {
return ( <h1>{this.state.data ? this.state.data : "loading"}</h1> );
}
}
export default Homepage;
问题出在您的节点服务器上。
您已经定义了一个中间件来设置特定的响应标头。
// This block.
app.use((req,res,next)=>{
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization")
})
问题是您没有调用回调函数上的next
参数,因此中间件没有将控制权传递给next
中间件(在您的情况下,路由处理程序)
修复:
app.use((req,res,next)=>{
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization");
next(); // Add this line
})
关于 express 中间件的一个重要说明:
如果当前中间件函数没有结束请求-响应循环,则必须调用 next() 将控制权传递给
next
中间件函数。 否则,请求将被挂起
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.