原始Node.js没有任何Web框架

我试图学习节点,我看到了很多的材料(如在那个着名的SO问题中提到的),问题是我看到的所有书籍,或者教程或者使用像明确的web框架,或者仅仅限制自己来解释什么节点并不比解释如何创build一个非常基本的HTTP服务器来侦听某个端口上的请求更深刻。
所以我真的想知道有没有人使用节点的W / O Web框架? 如果是这样的话,他们一定是在某个地方学过的,那么你能build议我在哪里学习呢?
我知道这是非常低的水平,但我不介意,我已经熟悉如何在C中创build服务器。
我真的很想知道我们如何真正为节点提供静态内容(在文件夹中自定义组织)以及我们如何将逻辑引入到我们的html中(我查看了所有这些,但只find了如何使用Express的结果,其中的逻辑是由<%// code%>之类的东西引入的,但是这可以在纯节点中完成吗?)。

这里已经提到的类似于我的问题并没有真正的答案。 最好的答案只是build议阅读官方的nodejs文档,就像这样说:
那里有一本拉丁语数百万字的字典,祝你好运。

所以,你能build议一些有据可查的,健壮的书/教程在哪里显示如何使用原始节点创build一个真实世界的网站?
如果没有,我想我将不得不坚持到PHP + Apache,并尝试优化这些规模。

Node.js本身就是一个Javascript执行引擎(基于V8),运行在许多不同的平台上,并带有一个标准的库。 这与其他具有标准库的解释型语言(如Python或PHP)有点类似。 将简单的node.js本身描述为一个“Web平台”是不准确的。 它有一个核心工具,可以在其中创build一个Web平台,但也可以用于与Web平台无关的各种其他types的用途。 例如,我已经构build了一些命令行编译工具,用于执行各种forms的文本处理(不使用任何networking的用途)。

所以我猜“原始”节点只是意味着解决任何你想解决的问题,而不是build立在第三方库之上(超出了node.js自带的标准库)。 就个人而言,我不确定为什么你真的想这样做。 node.js开发的一个巨大优势是整个NPM生态系统,其中有数以千计的预build,免费和开源模块可以解决数千个问题。 有些是一些function,但仍然有用,其他的则是解决丰富的问题​​的整个API。 NPM和这个生态系统的美妙之处在于,通过一个简单的命令,您可以将这些模块中的任何一个添加到您的项目中,并且只需几行代码,就可以在项目中使用它。 为了避免这个好处,我觉得这很愚蠢。

因此,学习原始的node.js意味着学习Javascript,学习经常用于node.js开发的工具(debugging器,NPM,控制台等),并学习node.js附带的标准库。 很less有人想坐下来真正学习标准库中的每一个function。 通常人们所做的就是对标准库中可用的所有模块进行长时间的观察,通过每个模块的页面来了解它们中有什么样的东西,然后发现自己想要构build的东西并开始构build它。 由于您不得不从文档或Googlesearch中find所需的东西并了解它们是如何工作的,或者通过学习您发现的其他node.js代码,您将了解到标准库的某些部分是如何工作的以及它的function。 如果您正在执行I / O(文件,networking等),您将很快遇到标准库中的大量asynchronousAPI,您通常需要或需要精通处理asynchronous操作(这实际上只是学习async Javascript),但在node.js项目中可能会很重要。

如果你真的想自己“学习”标准库,那么亚马逊和谷歌都有很长的资源列表,你可以通过这些列表来查看哪些是你想要的。 要求我们为您find这样的资源在StackOverflow中被认为是“脱离主题”,所以我将留下您去查阅这些列表并决定什么看起来有趣。 我自己就知道客户端的Javascript,并通过阅读一些networking资源,然后在自己的项目上工作,拿起node.js。 最后,我构build了一个运行在Raspberry Pi上的node.js系统,并位于我的阁楼监控温度探测器中,根据温度差异切换阁楼风扇,并提供用于控制,configuration和报告所有事情的Web界面。 它是一半的networking应用程序和半独立的温度控制器。

不幸的是,node.js标准库的文档不是很丰富的描述(我在那里)。 这在技术上是准确的,但通常不会回答任何人想要使用API​​的许多常见问题。 它似乎假设你已经知道很多Unix C标准库,因为它有许多类似的function(特别是对于文件访问)。 另外,对象层次结构(其中事物从其他事物inheritance)的文档缺点之一是,将给定对象所做的一切放在一起可能很难。 相反,你必须从心理上收集和理解基础对象所做的事情,然后试图弄清楚如何适应根对象正在做的事情。 这不是一个只有node.js面临的挑战,许多面向对象的系统都有这个文档挑战(它使用YUI驱使我)。

我很快发现,我真的需要能够find任何标准库函数的相关库源代码,所以我可以看看函数是如何写的,以回答我的问题。 这是开源以及如何searchGitHub(所有标准库源都在GitHub上)的巨大优势。

因此,通过node.js标准库中的所有模块页面来熟悉哪些地方以及哪里可以find它。 然后find你想要构build的应用程序。 如果你正在构build一个web应用程序,我可以想象没有任何理由不使用其他人已经为你构build的框架(我使用Express)。 没有理由自己重新创造一切。 如果你想在使用Express之前确定你已经理解了HTTP模块,那么你只需要使用提供两个静态文件的HTTP模块来构build一个简单的Web服务器,然后使用HTTP模块以另一种方式从其他服务器请求几个网页。 然后,开始使用Express来构build自己的Web应用程序。

至于你的一些更具体的问题:

我真的很想了解我们如何真正为节点提供静态内容(在文件夹中自定义组织)

这个问题的一些答案向您展示了一个基本的仅节点的Web服务器,它从文件系统提供静态内容。 更多的例子和解释在这里 。

我们如何实际地将逻辑引入到我们的html中(我查看了所有这些,但只find了如何使用Express来完成这项工作的结果,其中逻辑是由<%// code%>之类的东西引入的,但是这可以在纯节点中完成吗? )。

从头开始在你的HTML中引入“逻辑”意味着你首先build立一个服务于静态网页的系统,然后添加一个系统来parsing通过网页(在服务器上)的指令,这意味着你的服务器应该在将其发送到客户端之前,请修改或添加HTML。 有很多不同的方法可以做到这一点,这就是为什么现在有50个不同的系统可以做到这一点。 searchnode.js模板系统会find你的列表。 再次,我不知道你为什么要从头开始构build其中的一个。 这是一个研究项目,找出哪里的无数符合你的愿望最好的(我使用把手,胡须的衍生品我自己),但这应该是方式,而不是build立自己的系统从头开始。 而且,即使你想要一些不能用股票系统轻易实现的macros大function,也可以从股票系统开始并扩展它。

你所要求的东西似乎是两个不同的东西,你想要做原始节点,但同时知道人们是如何在现实世界中使用它。 几乎每个人都至less使用Express,(或者说,如果你站在最前沿的话就是Koa)作为他们的networking框架。 它们提供了创build健壮的Web服务器的基础。 然后,对于您的实际前端,您将使用AngularJS或ReactJS,您不会执行任何呈现服务器端模板呈现(例如,没有<%%>代码块)。 如果你select了React路由,你将需要像BaconJS这样的附加库来帮助粘合,因为React只是视图层,而Angular是一个包含所有MVC框架的框架。

最好的学习方法之一是看看MEAN stack yeoman generator https://github.com/DaftMonk/generator-angular-fullstack 。 使用生成器创build一个应用程序,并阅读它的来源,看看它是如何构build的,只是开始黑客去做你想做的事情。