Nodejs:在哪里或如何编写复杂的业务逻辑?

42

最近我接触了node.js和像express和jade这样的很酷的包。有些问题一直在困扰着我:

如果我选择使用node.js构建我的下一个网站,那么我将使用JavaScript编写服务器端的复杂逻辑?但是我不认为你可以将JavaScript与Java或Python进行比较,因为它们拥有如此广泛的库。node.js真的适用于此吗?还是我错过了什么?

我能从node.js调用Java或Python吗?


2
+1,+fav:我已经问过自己同样的问题了!但是没有答案!真的很想知道答案 =) - Arthur Neves
请查看有关Node.js和Java Comet应用程序的讨论:https://dev59.com/rm855IYBdhLWcg3wMBLV - TeaCupApp
这个问题更偏向于Node.js,http://www.quora.com/What-are-the-benefits-of-developing-in-node-js-versus-Python - TeaCupApp
2
你能否在以下方面澄清一下问题:您是在询问是否可以使用Javascript编写复杂但组织良好且易于维护的业务逻辑代码,还是说Javascript(nodejs)具有足够的能力(库)编写复杂的服务器端代码?换句话说,您是针对可维护性还是库的可用性? - Guven
1
@Guven:这是关于JavaScript库的可用性与Java或Python相比较的问题。 - Vishal
6个回答

30

我不太清楚这些人在说什么。

"广阔的库海洋"是社区正在积极开发的东西。请查看:http://search.npmjs.org/#/_analytics - 昨天发布了8个软件包。

它不会为您解决软件设计问题。至于在哪里以及如何编写业务逻辑,我们中的许多人都采用mvc或mvvm或类似的东西。如果你正在构建一个应用程序,并且喜欢 Ruby 程序员(例如)如何组织他们的代码,那么你可以考虑做一些类似的事情——没有人会告诉你如何组织你的代码。

请查看 https://github.com/joyent/node/wiki/modules

进行日常操作的一些较受欢迎的库:

  • Backbone.js: http://documentcloud.github.com/backbone/ - MVC
  • Spine.js:http://maccman.github.com/spine.tutorials/index.html - MCV
  • caolan/async:https://github.com/caolan/async - 帮助管理异步业务逻辑
  • 选择你的数据库:
  • 如果您喜欢ORM,那么还有许多可供选择的ORM。例如:http://mongoosejs.com/http://sequelizejs.com/ 等等。

    测试驱动开发是node的核心。有15种不同的TDD包可供选择,从完整的代码覆盖分析到自定义断言模块。

    说所有的模块都不完整是荒谬的。在这个社区中,有一个非常专注的团队每天构建和维护着大量可用的开源项目。

    可能有一些原因可以放弃使用node,但不是因为社区不活跃或缺少库。


    2
    考虑到这个问题是在2011年回答的,如今在2016年,答案有些不同了。我们最近看到一些JS框架获得了胜利,比如ReactJS和Node.js仍然很强大,但对于纯API,现在你有许多选择,从Amazon API到Python再到Laravel/Slim。 - Ron

    4
    我认为你错过了一些东西——更具体地说,Node.js 的核心目的,即异步 I/O 模型。
    我开始了一个小项目来测试 Node.js——它的“感觉”以及如何在上面编程。我对这样的生态系统中工作的容易程度印象深刻:Node.js 代码很容易编写(尽管其异步范式对于传统程序员来说并不那么直观),库也很容易构建等等。即使是 npm 也非常容易:我只需找到提供自己代码作为库的最简单方法——将其制作为公共包——而这实在是太简单了!
    然而,没有太多好的工具可用于处理 Node.js。也许因为任何事情都太容易了,大多数库仅是部分实现、未经记录的解决方案。
    此外,请注意,Node.js 的相关区别不在于 JavaScript 语言,而在于异步 I/O 模型。这是 Node.js 最有趣的方面,但异步编程风格并没有像传统的 Web 开发方式那样经过充分测试。也许它真的是被宣传的奇迹——或者,它并不像承诺的那样好。
    即使它有所回报,你是否有足够的开发人员来维护这样一个(至少目前仍然)不寻常的代码库?如果您可以从Node.js异步“生活方式”中获得许多优势,则可以使用更加稳定的语言和框架,例如Twisted用于Python(这是我首选的语言,所以请注意我的意见 :))。Java也可能有类似的东西。无论如何,我怀疑您现在对此模型没有太多兴趣,因为您的问题更关注语言而不是编程范例,所以Node.js对您来说并没有太多可提供的东西。

    所以...不,我现在不会专业开发Node.js,尽管我认为研究它既有趣又有教育意义。您可以这样做,但是请记住Node.js的主要目的:异步IO,事件驱动编程。如果这就是您想要的,那么Node.js是一个很好的选择。


    我现在不会用Node.js专业开发什么东西。- 2018年Node.js是否足够好用于生产? - Mohan Sharma
    1
    @MohanSharma 我很久以前发布了这个答案,我相信现在情况已经不同了。这个平台现在更加稳定,而且有一个庞大的社区支持它。我想这确实是最重要的因素:更多的人使用它意味着许多错误已经被发现和修复,新的错误也有更多的支持。所以,如果它能帮助到你,那就继续使用Node吧! - brandizzi

    3

    Ryan并没有从JavaScript开始学习。创建Node.js时,JavaScript缺少大量的类库是其中一个重要原因。

    这些大量的类库几乎都是使用阻塞代码编写的。

    要充分利用Node.js,你需要限制使用非阻塞式的类库。这意味着你可能需要编写一些类库来完成你在Node.js中的项目。


    +1:因为很多人认为由于Node.js是基于javascript的,我们有数百万的库可供使用,然而它们中的大部分都是阻塞式的代码!这在Node.js中是毫无意义的。 - Arthur Neves

    2
    当然,你可以使用Python、PHP、C++或其他技术与Node.js一起使用,因为Node.js可以作为子进程运行它们。Node.js让你在内部使用任何想用的技术。你可以结合最高效的程序使用任何你想用的东西。

    2
    我认为你会对通过Node.js在JavaScript中完成的工作量感到惊讶。有很多可用于Node,而且还有更多不断地被编写。此外,在需要降低级别的情况下,本机扩展也是可用的。
    如果你认为Node无法提供业务逻辑的解决方案,请浏览NPM或快速搜索Google,看看是否已经有人解决了你的问题。

    你有没有一些实际的经验?有些网站吗?或者有一些解决方案,你可以指点我一下,它们是使用纯粹的Node.js吗? - Arthur Neves
    2
    我个人的Node项目大多较小,但是在实际应用中也不难找到更大的Node应用。WordSquared 是其中一个著名的应用,并且已经有一些关于该应用的文章。Voxer 的后端也是使用Node编写的。如果你四处寻找,肯定会找到列表帖子目录 - Michelle Tilley
    这并不意味着Node是每个工作的正确工具,也不是说你应该仅仅使用Node来构建你的应用程序。话虽如此,断言Node没有用处,因为它没有“大量的库”,这有点谬误。 - Michelle Tilley
    哦,还有一个!我不知道怎么忘了,但是我们在工作中使用Node.js来驱动我们网站的“实时”部分(作为多人游戏的环境)。 - Michelle Tilley

    0

    有些事情 JavaScript 是做不到的。如果你遇到这些问题,Node 可能不是你的应用程序的最佳选择。但是你可能可以完成大部分你所需要的功能。

    至于 API 的限制,我建议你看一下 npm 和其存储库中的所有库。特别是像underscore.js这样的库。许多库旨在填补本地 JavaScript 相对于其他语言的缺陷。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接