首页 > 语言 > JavaScript > 正文

详解从NodeJS搭建中间层再谈前后端分离

2024-05-06 15:28:01
字体:
来源:转载
供稿:网友

之前在知道创宇的项目中有用到过nodejs作中间层,当时还不太理解其背后真正的原因;后来在和一位学长交谈的过程中,也了解到蚂蚁金服也在使用类似的方法,使用nodejs作为中间层去请求真实后台的数据;之后人到北京,也见到现在的公司也在往nodejs后端方向靠拢。随着知识的增加,加之自己查阅资料,慢慢总结出了一些原理。

为什么要前后端分离

1、开发效率高
前端开发人员不用苦苦地配置各种后端环境,安装各种莫名的插件,摆脱对后端开发环境的依赖,一门心思写前端代码就好,后端开发人员也不用时不时的跑去帮着前端配环境。

2、职责清晰,找bug方便
以前有了bug,前端推后端,后端推前端,不知道该谁去该,前后端分离,是谁的问题就该谁去处理,处理问题方便很多,后期代码重构方便,做到了高可维护性。

从做微信小程序引发的思考

最近出于爱好,写了个音乐播放器的微信小程序(原本想用vue写的,后来因为公司业务原因,年后可能去做微信小程序,所以就换了前端技术栈),源码在我的GitHub上: wx-audio 。

思考:后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加node端便是一种良好的解决方案。

在我的微信小程序demo的server端代码中,我通过http模块对真实后台(网易云音乐API)发起http请求,然后通过express模块搭建后端服务。

发起请求:

// http.jsvar formatURL = require('./formatURL.js');var http = require('http');const POSThttp = function(request){ return new Promise((resolve, reject) => {  let body = '';  // http模块拿到真实后台api的数据  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;

得到数据传回前端:

var express = require('express');var POSThttp = require('./POSThttp.js');var bodyParser = require('body-parser');// 使用body-parser解析post请求的参数,如果没有,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!')});            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选