2017-09-25 62 views
0

我有Express服务器需要通过将变量传递给React JS组件来与React组件进行通信。Express服务器如何与React Js组件通信

Express服务器代码:

app.all('/', ensureAuthenticated, function(req, res, next){ 
    var name = req.user['cn']; 
    var emailaddress = req.user['emailaddress']; 
    res.sendFile(BUILD+"/index.html"); 
}); 

这里ensureAuthenticated是单点登录功能,渲染页面之前对用户进行认证。我需要将记录用户的名称和emailaddress变量传递给React组件。我怎样才能做到这一点?

感谢和问候, 拉维

回答

0

你不能sendFile但最好你能做的就是像你一样只发送文件发送用户对象:在

app.get('*', function(req, res){ 
    res.sendFile(BUILD+"/index.html"); 
}); 

,然后所述反应侧则可以创建一个动作创建器,用于在提取的主成分当前用户必须例如:

componentWillMount() { 
    this.props.fetchUser(); 
} 

的fetchUser行动的创建者会像这样:

export const fetchUser =() => async dispatch => {  
    const res = await axios.get('/api/current_user'); 
    dispatch({ type: FETCH_USER, payload: res.data }); 
}; 

,并在你减速,你将有:

export default function(state = null, action) { 
switch (action.type) {        
    case FETCH_USER: 
    return action.payload || false;   
    default: 
    return state; 
} 
} 

,然后你可以设置在快递侧的路由处理程序处理的反应动作:

app.get('/api/current_user', (req, res) => {  
    res.send(req.user);        
}); 

然后在反应方面,你可以保存用户对象在localStorage的

,然后在后端的任何路径上确认用户必须经过身份验证,您可以将中间件ensureAuthenticated添加到路由处理程序。

在我的答案我假设你正在使用redux-thunkaxios