具有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); });