Javascript 使用node.js的Prerequesite知识

Javascript 使用node.js的Prerequesite知识,javascript,node.js,serverside-javascript,Javascript,Node.js,Serverside Javascript,Node.js现在似乎在书呆子的博客中占据了很多专栏,而且只要做一点家庭作业就不难看出原因 在进入学习节点之前,最好知道什么?我假设是Javascript,但还有其他技术或概念会有所帮助吗?从本地测试到生产服务器,我需要知道什么?Node.js是一个事件驱动系统,所以您将编写的许多代码都是异步的。这意味着您经常不能像这样编写代码 if( something() ) { somethingElse(); } 你必须做一些类似的事情 something(function(result

Node.js现在似乎在书呆子的博客中占据了很多专栏,而且只要做一点家庭作业就不难看出原因


在进入学习节点之前,最好知道什么?我假设是Javascript,但还有其他技术或概念会有所帮助吗?从本地测试到生产服务器,我需要知道什么?

Node.js是一个事件驱动系统,所以您将编写的许多代码都是异步的。这意味着您经常不能像这样编写代码

if( something() ) 
{ 
    somethingElse(); 
}
你必须做一些类似的事情

something(function(result){ 
     if(result){ 
         somethingElse(); 
     }
})
(假设
something()
是一个异步函数,例如,它不返回其结果,而是在完成后使用其结果调用回调(匿名函数)

这就是所谓的Node.js,也是有效使用Node.js所需克服的最大障碍之一


下面是关于CPS的另一篇更实用的文章:

好吧,由于node.js提升了JavaScript,让您可以编写完整的服务器应用程序,您可能需要熟悉面向对象技术:

  • 原型
  • 控制作用域的自动执行方法
  • JSON

这将允许您组织代码:-)

显然(正如您已经说过的)JavaScript是一种语言。我推荐一本很棒的JavaScript指南。

如果您正在构建一个普通的请求/响应web应用程序,那么基础知识应该是:

http/s的一般工作原理 http服务器示例在节点世界中非常常见,因为与其他web语言(如php)不同,您的节点应用程序不是“在”apache web服务器或类似服务器中。实际上,您正在创建一个工作的web服务器,该服务器将根据请求返回响应。这是一种与典型的“将html/php/任何文件粘贴到apache的web根目录中”不同的程序组织方式。node的一个优点是,它需要创建一个web/tcp/udp/cli服务器之类的东西,从而使线程池、事件循环、锁等许多讨厌的硬部件变得简单

会话/cookies/POST+GET 因为您将不得不以更手动的方式处理这些事情(至少在您编写模块或选择模块来处理它之前)。我电话面试的许多应聘者都无法为我定义典型语言如何处理会话存储的内部工作原理。他们只知道他们将值X粘贴在变量Y中,并且在会话期间它是可用的。实际上,有一个cookie被设置为通过会话id引用某个文件/数据库/任何存储。在node中,您自己(或模块为您)从http头中提取这些值,并构建在http的更基本的构建块之上。POST和GET数据也是如此

也就是说,您可以使用像express这样的框架——效果非常好,它将为您处理很多事情。然而,它仍然足够原始(大多数nodester更喜欢imo),您可以从http请求的内部获得

坚持不懈 大多数web应用程序都需要某种数据库。像mysql这样的关系数据库是实现这一点的一种方法——许多节点都喜欢mongodb这样的数据库,因为它给了它们更多的自由,比如模式+迁移,以及更多的javascript感觉(因为它们看起来像JSON)。幸运的是,这不是你必须做出的艰难而快速的选择,因为社区中有许多用于公共数据库的客户端库

非阻塞方法 正如其他一些人提到的,这在一定程度上会让你大吃一惊。在许多其他语言中,除非您使用特定的非阻塞框架,如python中的twisted或ruby中的eventmachine,否则您编写的代码几乎在所有情况下都是同步的。这意味着,当您向数据库询问信息时,您是这样做的:

result = query("SELECT * FROM users");
console.log(results);
console.log("howdy");
相反,在node(或支持回调/基于事件的io的其他框架)中,您可能会编写如下代码:

query("SELECT * FROM users", function(result){
    // Do something with your users
    console.log(result);
});
console.log("howdy");
在第一个示例中(来自同步世界),“howdy”将在结果之后打印。在第二个(异步)示例中,“howdy”在结果之前打印

当您必须相互依赖地执行许多同步操作时,这可能会变得棘手。当你说到这一点时,是时候研究一下流控制库了,比如——它们提供了对这些操作进行排序的工具,这样你的代码就不会看起来像可笑的嵌套


显然,这是一个广泛的问题。就我个人而言,我认为你应该全身心投入到这一切中去。这实际上是学习这些东西的一个好方法。

我想说这是一个问题,因为研究低级套接字编程以及不同的协议(HTTP、TCP/IP、TCP/IP6)是一个好主意,这样您就可以了解在运行node.js服务器时幕后发生了什么。观看所有的“Ryan Dahl”你可以找到谷歌的视频。还有一个很好的提示,如果有人能找到一个关于CPS的更清晰的解释(阅读:dumbed down),那将是非常有用的。询问,你会得到,在这里:)+1雄辩的JavaScript是一个很好的指南,它为“好的部分”提供了一个有趣的替代方案Douglas Crockford写的。为了避免回调,我建议不要使用异步,我自己也不是一个粉丝——承诺/未来对我来说不是一个有趣的概念。我喜欢看到传统的回调,但可以通过命名函数或普通的流控制进行组织。马铃薯