花了整整三天的时刻来处置惩罚一个异常异常小的题目.想要把一点心得体会记录下来.
首先是题目的提出:前端假如是react,后端是express,怎样举行数据的交互.
1.整体思绪
之前打仗express
的时刻前端模板用的是ejs
,那时刻就有些不明白的处所.最为不明白的几个题目是:前端和后端怎样合营?迥殊是前端迥殊庞杂的时刻,岂非照样全用模板吗?假如前端用了框架呢?这些题目关于大部分开发者或许非低级学习者来讲都不算题目,然则关于初学者来讲,假如不能完整地晓得这些观点和数据活动的体式格局,学起来就会有些”心虚”.
所以在打仗了express
和react
以后,我猛烈地想晓得二者是怎样举行数据的交互的.我想要的手艺栈是:react-redux-webpack-express
.在google和github上找了良久都没有找到适宜的,末了才发明,实在官网的谁人已是最好的例子Async.
现在获得的比较好的体式格局是用异步的体式格局,经由过程前端ajax来发出请求,后端吸收并处置惩罚请求,返回响应的数据(在这里不报告服务器衬着).在这里的ajax
假如引入jq会显得太笨重,所以依据官网的要领用 isomorphic-fetch
而由于引入了redux
,所以要把ajax
写在那里是一个题目. google
了一下,发明人人都以为写在action
内里最好(官网也是这么做的),所以就直接这么做吧.(随着官网没错)
下面就以一个异常异常简朴的例子为切入点,功用以下:有一个input
和一个button
,在input
内里输入,点击按钮,把input
的内容上传服务器(POST
). 同时下面有一个列表,从服务器上猎取数据并在react
中衬着(GET
). 异常异常异常简朴.
2.GET要领
把ajax悉数写在action
内里, 异步action
须要用到中间件. 有关中间件最好的文章我以为是这一篇, 内里讲了applyMiddleware
的完成道理和例子(实在有点像俄罗斯套娃,把底本的dispatch
逐步增强,比方能够用logger
加一点日记辅佐找bug
) 这里要用到一个叫做thunk
的中间件(完成道理很简约,能够本身找来揣摩)
下面的代码从服务器中猎取列表. 个中的fetch
的用法能够看这里, 这里也用到了promise
对象用于处置惩罚异步事宜,这个能够看阮一峰大神的这篇文章.
export const fetchList = () => {
return dispatch => {
dispatch({ type:"REQUEST_LIST" })
return fetch(`/list`, {
header: {
"dataType": "json"
}
})
.then(response => {
return response.json()
})
.then(json => {
dispatch(receiveList(json.items))
}
)
}
}
3.POST要领
POST要领与GET迥然不同,不过在server写代码的时刻要用上body-parser
, 不然有能够请求会变成undefined,写法是如许的.
详细的代码以下: POST要领相对庞杂一点点.
export const postAddItem = (text) => {
return dispatch => {
dispatch({type: "loadAddItem", text})
fetch('/send', {
method: 'POST',
headers: {
'Content-Type': "application/json",
'Accept': "application/json",
'Content-Type': "application/json"
},
body: JSON.stringify({ item: text })
}).then(res => {
if(res.ok) {
dispatch({ type: "ADD_ITEM", text })
console.log("POST SUCCESS");
}
}, e => {
dispatch({type: "loadAddItem", text})
alert("POST ERROR");
})
}
}
这些代码都是依据官网上Async的代码改的.
所以要真正控制redux, 官网文档和例子要熟读啊…
4.关于调试
关于调试我没有什么值得分享的(我也在找比较轻易的调试要领TAT,跪求引荐!!), 不过一个这几天下来总结了”肉眼debug”的思绪就是: 看数据怎样流,从那里最先变得不符合请求.之前在写的时刻就是connect
的处所最先有题目,效果死活找不出为何衬着不出来…明显在logger
上看到已猎取到了数据…
5.总结
个人感觉假如要”买通前后端”(最少明白吧),一定要仔细明白redux
,基本观点,异步,中间件(全部官网的内容很雄厚,要多读..) 不过基本也很主要!最基本的es6
,ajax
等一定要会…
本身写的粗拙的例子代码在此
(第一次写文章,本人是小白,有什么说得不对的不好的,谢谢提出!)