之前在知道創(chuàng)宇的項(xiàng)目中有用到過(guò)nodejs作中間層,當(dāng)時(shí)還不太理解其背后真正的原因;后來(lái)在和一位學(xué)長(zhǎng)交談的過(guò)程中,也了解到螞蟻金服也在使用類似的方法,使用nodejs作為中間層去請(qǐng)求真實(shí)后臺(tái)的數(shù)據(jù);之后人到北京,也見(jiàn)到現(xiàn)在的公司也在往nodejs后端方向靠攏。隨著知識(shí)的增加,加之自己查閱資料,慢慢總結(jié)出了一些原理。
為什么要前后端分離
1、開(kāi)發(fā)效率高
前端開(kāi)發(fā)人員不用苦苦地配置各種后端環(huán)境,安裝各種莫名的插件,擺脫對(duì)后端開(kāi)發(fā)環(huán)境的依賴,一門心思寫前端代碼就好,后端開(kāi)發(fā)人員也不用時(shí)不時(shí)的跑去幫著前端配環(huán)境。
2、職責(zé)清晰,找bug方便
以前有了bug,前端推后端,后端推前端,不知道該誰(shuí)去該,前后端分離,是誰(shuí)的問(wèn)題就該誰(shuí)去處理,處理問(wèn)題方便很多,后期代碼重構(gòu)方便,做到了高可維護(hù)性。
從做微信小程序引發(fā)的思考
最近出于愛(ài)好,寫了個(gè)音樂(lè)播放器的微信小程序(原本想用vue寫的,后來(lái)因?yàn)楣緲I(yè)務(wù)原因,年后可能去做微信小程序,所以就換了前端技術(shù)棧),源碼在我的GitHub上: wx-audio 。
思考:后端出于性能和別的原因,提供的接口所返回的數(shù)據(jù)格式也許不太適合前端直接使用,前端所需的排序功能、篩選功能,以及到了視圖層的頁(yè)面展現(xiàn),也許都需要對(duì)接口所提供的數(shù)據(jù)進(jìn)行二次處理。這些處理雖可以放在前端來(lái)進(jìn)行,但也許數(shù)據(jù)量一大便會(huì)浪費(fèi)瀏覽器性能。因而現(xiàn)今,增加node端便是一種良好的解決方案。
在我的微信小程序demo的server端代碼中,我通過(guò)http模塊對(duì)真實(shí)后臺(tái)(網(wǎng)易云音樂(lè)API)發(fā)起http請(qǐng)求,然后通過(guò)express模塊搭建后端服務(wù)。
發(fā)起請(qǐng)求:
// http.jsvar formatURL = require('./formatURL.js');var http = require('http');const POSThttp = function(request){ return new Promise((resolve, reject) => { let body = ''; // http模塊拿到真實(shí)后臺(tái)api的數(shù)據(jù) http.get(formatURL(request.body.musicname), function(res){ res.on('data', (data) => { body += data; }).on('end', () => { // 格式化 const { name, audio: musicUrl, page, album: { name: musicName, picUrl, }, artists: [{ name: singer, }], } = JSON.parse(body).result.songs[0]; const reply = { name, picUrl, musicUrl, page, singer, }; resolve(reply); }); }); });};module.exports = POSThttp;得到數(shù)據(jù)傳回前端:
var express = require('express');var POSThttp = require('./POSThttp.js');var bodyParser = require('body-parser');// 使用body-parser解析post請(qǐng)求的參數(shù),如果沒(méi)有,req.body為undefined。var app = express();app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true}));app.post('/', (req, res) => { POSThttp(req).then((data) => { res.send(data); }).catch((err) => { res.send(err); });});app.listen(3000, () => { console.log('open wx-audio server successful!')});
新聞熱點(diǎn)
疑難解答
圖片精選