国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

詳解從NodeJS搭建中間層再談前后端分離

2024-05-06 15:28:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

之前在知道創(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!')});            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 玛沁县| 吴川市| 土默特右旗| 容城县| 禹州市| 巫山县| 长兴县| 鹿泉市| 湖南省| 萝北县| 珠海市| 阳山县| 股票| 霸州市| 班玛县| 青川县| 纳雍县| 视频| 登封市| 乌恰县| 扎赉特旗| 凤凰县| 乌拉特前旗| 镇原县| 民县| 昆明市| 东城区| 常熟市| 安阳市| 新干县| 望都县| 西盟| 江油市| 增城市| 宣城市| 平顺县| 彭泽县| 雅安市| 沁水县| 阳原县| 巢湖市|