初学者,想用bootstrap模板,在网上看到很多很不错的网站前端模板,但是有一个问题是这些网页模板都是现成的html写好了的页面,如果我不用jade这样的模板引擎,怎么使用现成的html?
前端基本依靠ajax或者AngularJS来交互数据,后端express通过 res.sendFile() 直接对外输出 HTML 文件?这样可以? https://segmentfault.com/q/1010000006241202/a-1020000006242544
模板引擎的主要作用其实就是将数据渲染到页面,如果不使用模板引擎,就自己获取到数据后将数据组合成html字符串,然后插入到DOM中,这是最原始的方法了。 最近我也在用Vue写一个cnodejs’的PC端SPA,其实Vue也用到了模板引擎,模板引擎说实话很多时候还是很方便的。<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>
纯粹AJAX开发Web的讨论 所谓纯AJAX开发Web,其原理非常简单:所有界面(HTML)全部由JavaScript负责,服务器端代码只负责业务逻辑,并生成结构化的数据(json或xml)。 理论上来说,这种架构非常清晰,前后端开发完全分开。但在实际生产环境下,却存在不少的问题。下面是大家经常提到的问题: (1)由于html完全有javascript动态生成,导致前台js代码量迅速增长。由于JS引擎在个浏览器的实现存在差异,所以调试异常困难,即使使用jQuery等第三方库,问题仍然存在。
(2)由于目前搜素引擎不处理js代码,所以会导致无法搜索到网站内容,这对于门户型网站不可容忍;
(3)还是由于前台必须动态生成,导致无法预先生成静态页面,从而加重服务器负担;
(4)对于特色网站,UI也是智慧的结晶,而完全AJAX导致前台代码失去保护,容易被模仿,从而失去竞争力;
(5)大量的js代码,也会导致客户端首次访问速度变慢;
(6)很多移动平台,尚未完全支持ajax;
尽管存在诸多问题,纯AJAX在一些特定领取却非常适合: (1)企业内部应用,通常用来取代传统的桌面软件。由于范围小,所以可以容易控制客户使用的浏览器版本; (2)自动化控制与工控系统,与(1)类似; 看看WebOS等一些模仿桌面OS的Web应用,纯Ajax确实非常强大。
纯Ajax的绝大部分问题,都是Javascript引擎的不规范不统一造成的,一旦这个问题解决了,纯Ajax必将大放异彩。
中国人讲究“中庸之道”,凡事不能太极端,这也适用于纯Ajax网站,Ajax本身很好,但是单纯的使用它而抛弃传统的技术并非上策。
@beng0305 支持。
少量的EJS后端模板 + 主体的前端动态生成 = Perfect!
在我最近的项目里,web app的登录与登出处理还是走“后端EJS模板”技术路线,因为这样比较容易整合Passport.js + OAuth2。然后,当用户进入主体业务界面之后,那就是一个大大的单页应用了。
希望我的技术路线的选择对你有启发。
@BubblyPoker 老哥,源码开源了吗?看起来挺好的
@stuartZhang
你好:
请问,ejs+SPA的模式就是在/login
是被后端的路由捕捉,/
主体业务是被前端路由捕捉,是吧?
用户的session是靠什么传递的?
@hezhongfeng here, 每个回复都有个(来自 cnode-vue),你可以直接看的<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>
@hezhongfeng 用的是饿了么提供的element-ui,在element-ui分支下,master下是以前没用element-ui写的,没写完<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>
@BubblyPoker 哦 知道了 谢谢
@BubblyPoker 对了,依赖的模块就别传上去了
@hezhongfeng 没办法,公司网不行,npm i 太慢了,直接这样传上去快很多,以后会去掉的<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>
直接用ejs就行了,可以直接用html的
@BubblyPoker 。。。<br/><br/><a class=“tag” target=“new” href=“https://github.com/BubblyPoker/cnode-vue”>来自 cnode-vue</a>
@hezhongfeng 我目前代码实现是:
- Passportjs在后端路由捕获/login
- 如果用户登录失败,passportjs通过后端路由给浏览器发送一个HTTP 301重定向,送WEB用户回到《login页面》。
- 如果用户登录成功。额外说明:这里passportjs使用的是OAuth2的strategy,因为真正的用户资源并不在我们这。这种登录技术,我们佬大说叫什么:“Federal”。再详细的我就不知道了。
- 保存用户信息进入Redis
- passportjs通过后端路由给浏览器发送一个HTTP 301重定向,送WEB用户去《业务页面》。目前,这个页面的server path是/main
- 然后,/main页面发送的Ajax请求。在后端,就可以访问到 当前登录用户的 session信息了。
- 这个/main本身就是一个单页应用(但是,没有《登入》与《登出》模块),目前/main是使用的Angular 2实现的。/main页面假设:所有能够打开这个页面的用户都是通过了passportjs身份验证,且在server端有session的。
基本上,就是这个流程。因为复杂的部分都交给 passportjs了。所以,我自己的业务代码反而特别地简单。
建议前端和后端分离,后期好维护 前端负责数据渲染和页面样式,后端只提供数据,有利于团队开发
@stuartZhang 谢谢 特别详细,原来是使用了Redis存储session,感觉是比较好的方案
Mark From Noder
我用express 设置一下静态目录即可
app.use(express.static(path.join(__dirname, ‘public’)));