新手。如何用node.js进行前后端分离。
发布于 8 年前 作者 hehenode 11023 次浏览 来自 问答

求教。用node.js分离中,node负责数据交互转发,路由分配还有什么吗?与用ajax有什么区别和优劣啊?

16 回复

node是服务器端的JS 和ajax不可同日而语 node可以处理ajax get或者post提交到后端的所有事情

用ajax,不用node层也行啊,在后端也能处理啊。在分离上与node有什么优劣。我只知道用node对seo比较友好之外,不知道有其他哪些优势了。

node 和 seo没半毛钱关系。 我们目前的做法是,node提供路由和视图渲染,数据通过API请求php的接口。这样做的好处就是前端和后端的开发环境彻底分开了,不用再去跑后端的环境了,不用再在php文件里面填数据了,就这么简单

@hxh1246996371 就是在node层决定在浏览器还是node服务器渲染视图啊,如果在node层渲染的话,不是对seo友好吗。用ajax好像也能解决这个问题,不过有点麻烦吧。还有就是你们php和node是怎么交互的啊?也是http吗?

用node渲染非数据的视图,数据可以通过Ajax请求接口之渲染到视图上,其实还是对seo不友好,真正的友好也就是所谓的服务端渲染,意思是数据也是在服务端就渲染好了,而不用用过ajax再去请求,所以我说的这种方式是没有解决seo的。

当然 ,也可以在node服务端这一层做一个代理,这样的话就能实现真正的服务端渲染了。请求->node服务端->php服务端 ,阿里的前后端分离像就是采用的这种方式

php和node是没有直接交互的,不管后台是 php 、java还是ruby之类的,只需要提供标准的接口就行了,我们不需要关心后台语言是什么

@hxh1246996371 我就是在网上看的淘宝的那篇文章,现在的思路就是这样的。请求->node服务端->php服务端,前台http请求到node,node根据路由请求php的接口。数据也是这么一层一层回来的,数据在node层时再渲染成视图返回给前台。不知道我的思路对不对。

@hxh1246996371 服务器端为什么不用node js直接写 而是php接口

@AaronWB 你的思路就是用node做了一层代理,没问题,这样做的好处我上面说了,可以做到node的服务端渲染,这和直接用nodejs写后台的区别就在于,数据不是我们用node去从数据库里面获取的,我们也不需要管什么业务逻辑,而是直接获取接口返回的数据。

至于为什么不用nodejs直接写后台,这跟公司的技术结构有关系,并不是每个人都会写nodejs,公司的后端基本上都是写非node的,所以基本上都是前端的开发人员掌握了一定的node开发,他们还不能直接来开发后端。

再者,node在做后端这一块,对于复杂业务还不是很成熟吧(或许是开发人员的技术没达到)

@hxh1246996371 那么前端的工资加了么

@hxh1246996371 搞不明白把nodejs主要用来生成页面是什么策略?按你们现在的架构,用angular+php后台不是一样的效果?或者angular+nodejs后台不是更好?

@winglight angular+php : 不知道把angular拿这来说是什么意思。也就是传统的php后台开发,前面已经说的很清楚了,这样我们前端开发人员需要运行php环境,得看懂某些php标签,得去带有php标记的视图里面改。

之所以要用nodejs 就是把数据接口与视图路由独立开来,当然也可以选择其它的后台框架,但是nodejs相对来说是前端开发人员最熟悉的,也就成了不二选择了

angular+nodejs:我们的后台程序员不是学nodejs的

ajax是前端的,路由是后端的。

From KoaHub.js

@einsqing 现在就是路由node.js服务端来写,不过前端都懂js,学node应该是可以的。所以可以让前端来写路由了。

解决了没,具体怎么实现的,我的思路和你的一样但是不知道如何做

所有概念以奇怪的方式念杂糅到一起,竟不知道如何回答。。。

你问这个问题就好像是:

求教。用平底锅炒菜中,平底锅负责盛放食材,传导热量还有什么吗?与用炸的有什么区别和优劣啊?

建议你先去了解一下前后端分离、ajax到底是什么概念,或许就茅塞顿开了?

具体施行什么样的前后端分离架构还需要看具体的业务需求和技术选型,通常的做法是前端可以自我地、不借助后端地渲染,而且前端要有请求WEB API的能力,后端使用Node.js提供WEB API,他们之间的协作关系与过去的那种客户端+服务端的方式相同,各自一套系统,然后两套系统之间使用WEB API来进行数据交换。

所以简单的、小规模的来做的话可以是服务器上部署Nginx,前端H5页面作为一个静态root目录挂载到Nginx(如用户访问“/”的路径的时候直接去静态目录里找H5资源),然后针对于WEB API的请求(如用户访问"/api/"的时候)就由Nginx代理转发到Node.js服务端的端口上。这只是个最简单是的实现,根据实际情况还会有跟复杂的优化设计,比如使用CDN来托管前端资源,使用无状态的API设计和负载均衡系统来部署分布式的Node.js服务集群等等。

回到顶部