具有REST API体系结构的单页面应用程序
我在Node.js
构build了中等大小的Web应用程序。 起初,我没有计划,它会增长到中等规模,不知道它是否会被使用。 现在,随着客户的用户开始使用它,需要2个额外的function:
- 移动应用
- 单页应用程序
由于到目前为止我使用了服务器端模板(即所有我的API
路由响应与HTML
),我需要作出巨大的改变,以支持API
响应与JSON
只是为了移动应用程序,所以我决定重构整个应用程序同时支持这两件事情。
通过一些在线资源(即Single Page App Book )和比较可用的JavaScript框架( Angular vs Backbone vs React vs Ember ),我得出结论如下。 我的问题是,我错过了什么? 所以,这就是我打算如何扩展我的networking应用程序:
- 我将在
React
重写所有我的UI组件 - 所有当前的
API
路由仍然会以HTML
响应,而HTML
将使用服务器端React
进行服务器渲染 ,但这些React UI组件也将包含在浏览器端,这将支持单页应用程序function。 - 我将编写特殊的
REST
API
,可能基于JSON API
标准,以便服务器与单页面应用程序和移动Web应用程序进行通信。 - 两个
API
路由(API
响应页面 –HTML
和数据 –JSON
)将使用Express
路由器完成,该路由器将执行用于封装数据与数据访问层 (服务器组件)的组合操作的控制器 (服务器组件)。 - 数据访问层基本上由
Mongoose
模型组成。
由于这将需要更长的时间来执行和重构,我想确保我在正确的轨道上。 我在这里想念什么?
如果包含flux模式,它将使您的应用程序更易于构build和维护。 我build议你看看一些启动项目,选一个赞扬你自己的风格。 这里是一个来自https://github.com/calitek/ReactPatterns React.14 / ReFluxSuperAgent的例子。 看起来似乎很复杂,但模式提供了一个很好的关注和灵活性的分离。
server.js
'use strict'; let bodyParser = require('body-parser'); let express = require('express'); let favicon = require('serve-favicon'); let path = require('path'); let port = Number(3500); let routes = require('./routes'); let app = express(); let server = app.listen(port); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use('/', express.static('ui-dist')); app.use('/routes', routes); app.use(favicon(path.join(__dirname, '..', 'ui-dist', 'img', 'favicon.ico'))); app.get('/', function(req, res){ res.sendfile(__dirname + '/index.html', [], null); });