Node.js 从后端接收数据返回未定义的数据

Node.js 从后端接收数据返回未定义的数据,node.js,reactjs,Node.js,Reactjs,在login post端点中的node.js中,我获得了用户的登录数据。我在变量userData中声明req.user.dataValues,并尝试在/data端点中访问它,以便以后可以在前端访问它 Node.js-localhost:4000 router.post('/login',函数(req,res,next){ passport.authenticate('local',函数(错误、用户、信息){ 如果(错误){ 返回下一个(错误) }如果(!user){ console.log('m

在login post端点中的node.js中,我获得了用户的登录数据。我在变量
userData
中声明
req.user.dataValues
,并尝试在
/data
端点中访问它,以便以后可以在前端访问它

Node.js-localhost:4000

router.post('/login',函数(req,res,next){
passport.authenticate('local',函数(错误、用户、信息){
如果(错误){
返回下一个(错误)
}如果(!user){
console.log('message:'+info.message);
返回res.redirect(“/login”)
}否则{
请求登录(用户、功能(错误){
如果(错误){
返回下一个(错误);
}
让userData=req.user.dataValues;
路由器.get('/data',(req,res)=>{
console.log(userData)
res.json({user:userData})
})
res.json({redirectUrl:“app”,user:req.user.dataValues});
});
}
})(req、res、next);
});
我正在使用下面的代码从node.js的
/data
端点获取数据。我没有得到任何错误,但结果是未定义的,我想知道为什么?我需要这个数据在我的前端建立登录等

react.js-localhost:3000

测试=()=>{
取回(“http://localhost:4000/data")
.then(res=>console.log(res.json()))
.那么(
(结果)=>{
console.log(结果)
},
(错误)=>{
console.log(错误)
}
)
}

我在express上运行了一些测试。看起来您以错误的方式定义了
/data
端点

您在匿名函数中定义端点,因此它只存在于函数的作用域中

你该走了

router.get('/data', (req, res) => {
    console.log(userData)
    res.json({user: userData})
})

router.post('/login)

之外,您是否通过添加适当的头来允许跨源资源共享(CORS)?您也通过
next(err)
返回错误,但您似乎没有处理它,这是我的CORS设置
app.use(function(req,res,next){res.header(“访问控制允许源”,“*”;res.header(“访问控制允许头”,“源,X请求,内容类型,接受”);next();});app.use(cors)
我不确定
下一步(err)
另一种可能是因为您对
\login
\data
端点的变量都使用了
res
,您实际上并没有发送对原始请求的响应。我已经考虑过这一点,但用户数据在
/login
POST端点中。我无法访问
/data
中的数据。我的意思是我不知道怎么做。使用passport中的会话。当登录成功时,您可以从这里了解情况,将数据存储在会话中,并使用200状态码或重定向进行响应。当请求/data时,在会话中查找存储的值(如果存在),并返回相同的值。我正在使用
/login
POST中的
序列化用户
函数和
/data
端点中的
反序列化用户
函数。但是不起作用。你介意给我举个代码例子吗?会有很大帮助的!序列化和反序列化不会存储在会话中,而是使您的数据可用于存储在会话中。您实际应该使用的是express中的会话中间件。您可以按照教程进行操作,也可以按照描述中链接的github repo进行操作。