【问题标题】:Frontend Architecture for a web application [closed]Web 应用程序的前端架构 [关闭]
【发布时间】:2011-10-23 00:58:33
【问题描述】:

我必须编写一个新的 Web 应用程序,目前正在决定架构,我知道我希望能够做几件事:

  1. 所有机器必须是对称的,即:商品机器没有自定义构建服务器 (aws)
  2. 我想要一个与 UI 分离的 ReST API,因为我已经拥有三个 API 客户端:移动应用程序、网站和来自第三家公司的服务器,等待构建产品
  3. 它需要能够水平缩放(a but of a repeat of 1)
  4. 易于维护:没有时间学习新语言,更多可用的候选人但愿意采用新技术

这是我提出的基本架构:

nginx+nodejs+expressjs+YUI的前端组合, api:nginx+tomcat+spring框架栈(rest+Security+core+aop)

前端将使用 oAuth 2.0 与 api 对话

我以前做过的 api 没有什么令人兴奋的,我知道它可以工作并且效果很好很想放一些 scala 风味,但我没有时间。

我主要关心的是前端:nodejs 非常令人兴奋,我已经玩了一段时间也喜欢它在 JS 中的事实,但我害怕导航+模板+会话(仅用于身份验证:无状态, stateless,stateless)+logging+debugging of it ,如果它工作得很好,但它不是一个成熟的开发环境......

这里有人开发了带有堆栈或子集的完整前端吗?还有其他可供选择的建议吗?

谢谢大家。

【问题讨论】:

    标签: spring api rest node.js frontend


    【解决方案1】:

    因此,如果您在测试方面遇到问题,那么您只是误解了 Node.js 的一些特性并表达了。例如,您可以使用这样的东西进行测试:

    app.get('/route', function(req,res,next) {
        require('./controllers.js').method(req,res,next)
    });
    

    然后你需要在你的controlles.js 中删除所有需要的文件的缓存:

    if (require.cache[__filename])
    {
      var del = false;
      for ( i in require.cache)
      {
        if (i == __filename)
        {
          del = true;
        }
        if (del)
        {
          delete require.cache[i];
        }
      }
    }
    

    所以现在您的控制器将在请求通过时立即更新到当前版本。

    要了解 nodejs 是如何工作的,试试这个:

    require.js

    module.exports = {};
    

    ma​​in.js

    var x = require('./require.js');
    x.tell = true;
    var y = require('./require.js');
    y.tell = false;
    
    console.log(require('./require.js'));
    

    【讨论】:

      【解决方案2】:

      但我担心导航+模板+会话(对于 仅身份验证:无状态、无状态、无状态)+日志记录+调试 其中

      导航?不知道你在这里的意思。使用超链接。 AFAIK 节点中没有像 Rails 的 form_for() 类型助手这样的东西,但这些对我来说从来没有那么有趣。如果你想要类似 Rails 风格的前后过滤器,比如需要登录用户,那么 connect 就可以了。

      app.all('/app/*', requireUser)
      

      这将为任何以/app 开头的路径调用requireUser。在requireUser 内部,您可以确保req.session.user 存在(并且可能具有适当的授权)。如果是这样,您调用next() 并执行负责实际生成响应的中间件。如果用户未登录或未授权,您可以生成 30X 重定向响应并且不要调用next()。完毕。在express.js guide 中有一个很好的例子。搜索loadUser。这个设计真的很优雅,恕我直言。

      模板?嗯,node.js 的模板选项与任何其他平台一样好或更好。试试jade 或其他十几个中的任何一个。您可以在服务器和浏览器中使用相同的模板,这是一个不错的选择。查看this video of Dav Glass using YUI widgets on the server side in node.js,因为你喜欢YUI。

      会话? Connect sessions。味道很棒。少填。有什么问题?

      记录? Winston 为我工作。我认为还有更高级的库。

      调试? node-inspector 为 node.js(恕我直言)提供了最好的调试支持。它使用 chrome 的检查器进行调试,并且与调试客户端 javascript 一样棒。通过jasbin 运行时,我还可以调试服务器端单元测试。

      这是what companies are using node.js in production的答案。

      【讨论】:

      • 感谢链接!,导航是指类似 jsf 导航 xml 之类的东西,尽管我讨厌 JSF,但很难从链接中看到整个站点地图,从而进一步控制它,你如何实现身份验证,如果用户未通过身份验证,则保护所有 url 重定向到一些 login.jsp 我可以想到几种方法,但有框架吗? ,服务器可能由于未捕获的异常而崩溃的事实也是一个问题......你有没有在生产中运行 nodejs ?
      • 用更多导航信息编辑了我的答案。您还可以使用app.error 来捕获错误并防止服务器崩溃。我一直在“生产”中使用 node.js,但主要用于我自己使用的纳米站点。
      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2011-11-29
      • 2011-09-10
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多