微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用node.js的前缀知识

Node.js现在似乎在书呆子博客中获得了很多专栏,而且只需要做一些功课就不难看出原因.

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

解决方法

如果您正在构建一个vanilla请求/响应Web应用程序,那么基础知识将是:

http / s的工作原理

http服务器示例在节点世界中非常常见,因为与其他Web语言(如PHP)不同,您的节点应用程序不会生活在apache Web服务器之类的“内部”.您实际上是在创建一个可以根据请求返回响应的工作Web服务器.它是一种组织程序的一种非常不同的方式,而不是典型的“坚持你的html / PHP / apache的web根目录中的任何文件”而去.节点的优势在于它需要创建一个web / tcp / udp / cli服务器,使许多令人讨厌的硬件如线程池,事件循环,锁等等变得无足轻重.

会话/ cookies / POST GET

因为您将不得不以更加手动的方式处理这些事情(至少在您编写模块或选择模块来处理它之前).我通过电话采访的许多候选人无法为我定义典型语言如何处理会话商店的内部工作方式.他们只知道他们将值X保留在变量Y中,并且在会话期间可用.实际上,有一个cookie被设置为按会话ID引用文件/数据库/任何商店.在节点中,您可以自己从http标头中提取这些值(或者模块为您执行此操作),并在http的更基本构建块之上构建. POST和GET数据也是如此.

话虽这么说,你可以使用像express-http://expressjs.com/这样的框架,效果很好,它会为你处理很多事情.但是,它仍然足够原始(大多数节点人员更喜欢imo),你可以在http请求的内部获得.

坚持

大多数Web应用程序都需要某种数据库.像MysqL这样的关系型数据库解决这个问题的一种方式 – 许多节点工具更喜欢像mongodb这样的东西,因为它给了他们更多的自由,比如模式迁移,以及更多的javascript感觉(因为事情看起来像JSON).幸运的是,由于社区拥有许多用于公共数据库的客户端库,因此您无需做出艰难而快速的选择.

非阻塞方法

正如其他人提到的那样,这可能会在一定程度上打击你的思想.在许多其他语言中,除非您使用特定的非阻塞框架(如python中的twisted或ruby中的eventmachine),否则您将编写几乎在所有情况下都是同步的代码.这意味着当您向数据库询问信息时,您就是这样做的:

result = query("SELECT * FROM users");
console.log(results);
console.log("howdy");

相反,在节点(或支持基于回调/事件的io的其他框架)中,您可能会编写如下代码

query("SELECT * FROM users",function(result){
    // Do something with your users
    console.log(result);
});
console.log("howdy");

在第一个例子中(来自同步世界),’howdy’将在结果后打印出来.在第二个(异步)示例中,在结果之前打印“howdy”.

当你必须依赖彼此进行许多同步操作时,这会变得棘手.当你到达这一点时,是时候查看像https://github.com/caolan/async这样的流控制库 – 它们提供了对这些操作进行排序的工具,因此你的代码看起来并不可笑.

显然这是一个广泛的问题.我个人认为你应该潜入并全力以赴.它实际上是学习这些东西的好方法.

原文地址:https://www.jb51.cc/js/158439.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐