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

Cor*_*ped 18 javascript node.js

我正在尝试学习节点,我看到了很多材料(正如那个着名的SO问题所建议的那样),问题是我看到的所有书籍,或者教程要么使用像快递这样的网络框架,要么只是限制自己来解释什么节点并且没有比解释如何创建一个非常基本的http服务器来监听某些端口上的请求更深入.
所以我真的很想知道是否有人使用带有web框架的节点?如果是这样,他们必须在某个地方学到它,所以请你建议我在哪里学习它?
我知道这是非常低级别的,但我不介意,我已经熟悉如何在C中创建服务器.
我真的很想了解我们如何真正为节点提供静态内容(在文件夹中自定义组织)以及我们如何在我们的html中实际引入逻辑(我看了所有这些,但只找到了如何使用Express,其中逻辑是由<%// code%>引入的结果,但这可以在纯节点中完成?).

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

那么你能否提出一些文档齐全,功能强大的书籍/教程,其中展示了如何使用原始节点创建真实世界的网站?
如果没有,我想我将不得不坚持使用php + Apache并尝试优化那些扩展.

jfr*_*d00 15

Node.js本身就是一个Javascript执行引擎(基于V8),它运行在许多不同的平台上,并带有一个标准库.它与其标准库(如Python或PHP)的任何其他解释语言有点类似.将plain node.js本身描述为"web平台"是不准确的.它有核心工具,可以用它制作网络平台,但它也可以用于与网络平台无关的各种其他类型的用途.例如,我已经构建了一些命令行构建工具,用于执行各种形式的文本处理(不使用任何类型的网络).

所以我认为"原始"节点只是意味着解决你想要解决的任何问题,而不是建立在第三方库之上(超出node.js附带的标准库).就个人而言,我不确定你为什么要这么做.node.js开发的一个巨大优势是整个NPM生态系统,其中有数千个预构建,免费和开源模块,可以解决数千个问题.有些是一些功能,但仍然有用,而其他功能则是解决各种问题的完整API.NPM和这个生态系统的优点在于,通过一个简单的命令,您可以将任何一个模块添加到项目中,并使用几行代码,您可以在项目中使用它.我认为避免这种优势是愚蠢的.

所以学习raw node.js意味着学习Javascript,学习经常用于node.js开发的工具(调试器,NPM,控制台等等),并学习node.js附带的标准库.很少有人想坐下来实际学习标准库中的所有功能.通常人们所做的就是仔细查看标准库中的所有模块,逐页查看每个模块以了解它们中包含的内容,然后找到自己想要构建的模块并开始构建它.由于您不得不通过文档或Google搜索或通过研究您找到的其他node.js代码来查找事物并弄清楚它们是如何工作的,因此您将了解标准库的某些部分是如何工作的以及它的作用.如果您正在进行I/O(文件,网络等),您将很快在标准库中遇到大量异步API,您通常会希望或需要熟练处理异步操作(这实际上只是学习async Javascript),但在node.js项目中可能很重要.

如果你真的想单独"研究"标准库,那么亚马逊和谷歌都有很长的资源列表,你可以通过这些资源来查看哪些资源似乎按照你想要的方式处理.要求我们为您找到这样的资源在StackOverflow上被视为"非主题",所以我将让您去查阅这些列表并确定看起来有趣的内容.我自己知道客户端Javascript并通过阅读一些Web资源然后处理我自己的项目来获取node.js.最后,我构建了一个在Raspberry Pi上运行的node.js系统,它位于我的阁楼监控温度探测器中,根据温度差异切换阁楼风扇,并提供Web界面来控制,配置和报告正在进行的所有事情.它是半个网络应用程序和半个独立温度控制器.

不幸的是,node.js标准库的文档并没有丰富的描述性(我很善良).它在技术上是准确的,但通常不会回答任何想要使用API​​的常见问题.它似乎假设您已经了解了很多Unix C标准库,因为它具有许多类似的功能(特别是对于文件访问).此外,对象层次结构(其中事物继承自其他事物)的文档缺点之一是,在一个地方很难将给定对象所做的一切都放在一起.相反,你必须在心理上收集和理解基础对象的作用,然后尝试弄清楚它是如何适应根对象的作用的.这不是一个只有node.js面临的挑战,许多面向对象的系统都有这个文档挑战(它曾经用YUI驱使我疯狂).

我很快发现,我真的需要能够找到任何标准库函数的相关库源代码,这样我才能看看函数是如何实际编写的,以便回答我的问题.这是开源和可搜索的GitHub的巨大优势(所有标准库源都在GitHub上).

因此,请遍历node.js标准库中的所有模块,以熟悉其中的内容以及您在哪里找到它.然后找到自己想要构建并构建它的应用程序.如果您正在构建一个Web应用程序,我可以想到没有理由为什么您不想使用其他人已经为您构建的框架(我使用Express).没有理由自己重新发明一切.如果您想在使用Express之前确保理解HTTP模块,那么只使用提供两个静态文件的HTTP模块构建一个简单的Web服务器,并使用HTTP模块以另一种方式从其他服务器请求几个Web页面.然后,开始使用Express构建自己的Web应用程序.

至于一些更具体的问题:

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

此问题的一些答案显示了一个基本的仅节点Web服务器,它提供来自文件系统的静态内容.这里有更多的例子和解释.

我们如何在我们的html中实际引入逻辑(我看了所有这些,但只找到了如何使用Express,其中逻辑是由<%// code%>引入的结果,但这可以在纯节点中完成吗? ).

从头开始在HTML中引入"逻辑"意味着你首先构建一个服务静态网页的系统,然后你添加一个系统来解析网页(在服务器上),找到它们中的指令,这意味着你的服务器应该在将HTML发送到客户端之前执行某些操作来修改或添加HTML.有许多不同的方法可以做到这一点,这就是为什么可能有50个不同的系统已经做到这一点.搜索node.js模板系统会找到一个列表.同样,我不知道你为什么要从头开始构建其中一个.这是一个研究项目,可以找出最适合你的欲望的最佳项目(我正在使用Handlebars,我自己的Mustache的衍生物),但这应该是方式,比建立自己的系统更少的工作从头开始.而且,即使您想要一些使用库存系统无法轻松完成的强大功能,您也可以从库存系统开始并扩展它.