用于处理node.js的Prerequesite知识
Node.js现在似乎在书呆子博客中已经有很多专栏了,而且有一点功课,不难理解为什么。
在深入学习节点之前知道什么是好的? 我假设使用Javascript,但任何其他技术或概念,将有助于? 从本地testing到生产服务器,我需要知道什么?
如果您正在构build一个香草请求/响应Web应用程序,基本要点是:
一般http / s的工作原理
http服务器的例子在节点世界中是很常见的,因为不像其他的web语言(比如php),你的节点应用程序并不在apache web服务器或类似的“内部”。 您实际上正在创build一个可以根据请求返回响应的工作Web服务器。 它是一个非常不同的方式组织一个程序比典型的“坚持你的HTML / PHP /任何文件的Apache根网站”,并去。 节点的优势在于它需要像创build一个web / tcp / udp / cli服务器这样的东西来简化许多令人讨厌的硬件部分,比如线程池,事件循环,锁等。
会议/cookies/ POST + GET
因为你将不得不以更加手动的方式来处理这些事情(至less在你写一个模块或者select一个模块来处理它的时候)。 我面试的许多候选人不能为我定义典型语言如何处理会话存储的内部工作。 他们只知道他们在variablesY中保留了X值,并且在会话持续期间可用。 实际上,有一个cookie被设置为引用一个文件/数据库/任何存储在某个地方的会话ID。 在节点中,您可以自己将这些值从http头中取出(或者一个模块为您完成),并在http的基本构build块之上构build。 POST和GET数据也是如此。
也就是说,你可以使用像express这样的框架来达到很好的效果,它会为你处理很多事情。 然而,它仍然足够原始(大多数节点喜欢imo),你可以在http请求的内部得到。
坚持
大多数Web应用程序将需要某种数据库。 像mysql这样的关系型数据库是一种解决这个问题的方法 – 很多节点都喜欢mongodb,因为它给了他们更多的自由,例如模式+迁移,以及更多的JavaScript感觉(因为事情看起来像JSON)。 幸运的是,它不是你必须作出一个硬性和快速的select,因为社区有许多共同数据库的客户端库。
非阻塞方法
正如其他人所说的,这是在某种程度上可以打动你的头脑的东西。 在许多其他语言中,除非你使用了像python中的twisted或者ruby中的eventmachine这样的特定的非阻塞框架,否则你写的代码在几乎所有情况下都是同步的。 这意味着当你问你的数据库的信息时,你是这样做的:
result = query("SELECT * FROM users"); console.log(results); console.log("howdy");
相反,在节点(或其他支持基于callback/事件的io的框架)中,您可能会编写如下所示的代码:
query("SELECT * FROM users", function(result){ // Do something with your users console.log(result); }); console.log("howdy");
在第一个例子中(来自同步世界)结果之后将打印'howdy'。 在第二个(asynchronous)示例中,“howdy”被打印在结果之前。
当你必须做很多同步操作彼此依赖时,这可能会变得棘手。 当你到了这个地步,有时间看看像https://github.com/caolan/async这样的stream程控制库,它们提供了sorting这些操作的工具,所以你的代码看起来并不可笑。
显然它是一个广泛的问题。 就我个人而言,我认为你应该潜入并把它全部旋转。 其实是学习这些东西的好方法。
Node.js是一个事件驱动的系统,所以你写的很多代码都是asynchronous的。 这意味着你经常不能写代码
if( something() ) { somethingElse(); }
你将不得不做类似的事情
something(function(result){ if(result){ somethingElse(); } })
(假设something()
是一个asynchronous函数,例如一个不返回结果的函数,而是一旦完成,就会调用一个callback函数(匿名函数)
这被称为持续传递风格(CPS) ,是您需要有效使用Node.js的最大障碍之一。
这是另一个更实用的CPS: http : //matt.might.net/articles/by-example-continuation-passing-style/
显然(如你所说)JavaScript是一种语言。 我推荐Eloquent Javascript一个伟大的JavaScript指南。
那么,因为node.js提升了JavaScript让你编写全面的服务器应用程序,所以你可能想要熟悉面向对象的技术:
- 原型
- 自我执行的方法来控制范围
- JSON
这会让你组织你的代码:-)
- 如何在关键值对的特定位置写入js文件?
- 为什么https.Agent在通过node-http-proxy进行代理时会抛出parsing错误?
- 根据对象的dynamic键更新表
- 如何调用函数一次forEach循环完成?
- 我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?
- 触发断开事件之前,Socket.io需要很长时间
- Node.js Express禁用自动会话创build
- 无法得到globalShortcut注册命令index.js使用发送函数在节点/电子JavaScript应用程序
- 在Node.js中使用restler获取HTTP响应