2017-09-25 44 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