什么是 Node.js?
维基百科说,“Node.js 是谷歌 V8 JavaScript 引擎、libuv 平台抽象层和核心库的打包编译,它本身主要用 JavaScript 编写。用于服务器端编码、处理 AJAX 请求、维护不同 API 的路由和操作数据库。”
Node.js 是如何工作的?
Node.js 的创建者 Ryan Dahl 的目标是创建具有推送功能的实时网站,其灵感来自 Gmail 等应用程序。所以他带来了 Node.js。在 Node.js 中,他为开发人员提供了一个在非阻塞、事件驱动 I/O 范式中工作的工具。
我们知道,在 Web 浏览器中,开发人员只能使用语言,因为他们必须为用户提供安全性。通常在这种情况下,所有活动都针对 DOM 操作和异步页面信息加载。
在这里,Node.js 为保留其浏览器特性的新视角开辟了机会。
- 1. Node.js 开发人员在他们的工作中发现简单和兼容的地方是什么?
- 2.专家们在这一年里学到了什么?
- 3.新手必须避免哪些错误?
好吧,随着时间的推移,专家们已经了解了对新手和专家都有益的各种提示和技巧。让我们分享其中的一些好处,以帮助您回顾或重新开始。
-
- Node.js:它是异步的
Node.js 的一个显着特点是它是单线程的,从上到下异步地设计和实现。由于这种异步特性,超过 60% 的开发人员遇到了问题,但今天他们中的大多数人都知道解决方案。当您运行一个耗时的工作(例如访问数据库)时,请使用计数器来跟踪循环,否则在完成循环之前,下一个函数将开始。
运气不好,因为仍然可以进行同步/阻塞调用。好吧,许多文件系统都有异步和同步版本,例如 writeFile 和 writeFileSync。即使您在代码中避免使用异步方法,也可能存在于具有阻塞调用的外部库中。
看这里 –
良好做法:异步写入文件
1| fs.writeFile('message.txt', 'Hello Node', function (err) {
2| console.log(“它已保存,服务器保持响应!”);
3| });
错误做法:同步写入文件
1| fs.writeFileSync('message.txt'Hello Node');
2| console.log(“它已保存,但您只是阻止了所有请求!”);
-
- Node.Js:什么是回调地狱,如何处理它
什么是回调地狱?– 过度嵌套的异步回调称为回调地狱。
最好将嵌套回调保持在最低限度,因为这是解开回调的简单方法。
让我们从一个典型的例子开始解释我们的观点——
1|function register(name, password, cb){
2| checkIfNameExists(name, function(err, result){
3| if(err){
4| return cb(“error”);
5| }
6| checkIfPasswordGood(password, function(err, result){
7| if(err) {
8| return cb(“error”);
9| }
10| createAccount(name,password, function(err,result){
11| if(err){
12| return cb(“error”);
13| }
14 | createBlog(name, function(err, result){
15| sendEmail(name, function(err, result){
16| callback(result);
17| });
18| });
19| });
20| } );
21| });
22| }
您会遇到某些导致回调地狱的异步操作,其 -
-
-
- 异步操作链:从 API 获取一些东西,用另一个 API 处理它并将结果写入数据库。
-
-
-
- 异步集合操作:对象的集合,在所有操作完成后执行异步操作或其他一些动作
-
为了防止回调地狱,您可以浏览一些很棒的库,例如:
1. Async.js:无需嵌套即可轻松执行一系列函数
2. Bluebird:Promises 通过映射和入队使异步逻辑更易于管理
3. 问:揭示了 Promise 的概念,就像 bluebird 一样可以轻松管理嵌套调用
-
- Node.Js:单独的实用程序和配置文件
开发者必须养成使用 util.js 文件来处理常用功能的习惯。尝试将此文件作为模块中的变量获取。这反过来又会减少全局变量的数量和代码长度。甚至可以存储常量参数的配置文件。
假设您需要一个应用程序来显示前五名学生的详细信息,它可能会有所不同,成为十名学生。所以不要对你的代码限制太苛刻。将其保存在配置文件中。一种最佳做法是维护一个对多语言应用程序有用的“Lang”文件夹。
至于文件获取方面,在Node.js中很简单。你可以写,
1| var util = require('./util.js'),
2|
3| englishMessages = require('./lang/en.js');
-
- Node.js:查看监视器性能
问问自己如何监控应用程序性能和配置文件,因为您需要确保应用程序以最佳速度运行。好吧,为此你会得到一些工具,比如 Nodefly、New relic 等
Nodefly——一行简单的代码,它开始监控你的应用程序以检测内存泄漏,或者测量 redis 需要多长时间,进行 mongo 查询和其他东西。
New Relic – 该工具将帮助开发人员在您的实时和数据密集型 Node.js 应用程序中监控对服务器监控的响应时间。
-
- Node.Js:使用粒度模块委托
在 Node.js 中你必须处理很多表,因此需要拆分代码。最好为不同的表制作不同的模块,并与子模块交互制作一个单独的父模块。
好吧,让我们举个例子——办公室数据库中有不同的部门,4到6个项目构成一个部门,员工人数构成一个部门。
现在您可以用四个模块构建这个项目——a
。员工
B. 项目
C. 部门和
d。办公室
这里Office是您的父模块,其余三个是子模块。该模块的功能是将控制器传递给适当的模块。假设您尝试更新Employee表,为此,您还必须更新Projects和Department。不要试图将其他模块获取到学生模块中。最好将请求传递给 Office 模块,它会将请求定向到首选模块,这将帮助您轻松地对代码进行排序和检查错误。
-
- Node.Js:调试很容易
如果您使用 Java 或 C# 等具有大量 IDE 集成的语言,那么调试 Node.js 似乎令人困惑。大多数新的 Node 开发人员更喜欢通过使用 console.log 来采用调试模式。但是,您仍然会得到一些替代方法,这些替代方法是调试的常规方法。Node.js 带有一个内置的调试器,它通过调用 node debug 来运行,比如Node Inspector。
Node Inspector – node.js 的调试器界面,使用 Blink Developer Tools(早期的 WebKit Web Inspector)。它允许开发人员使用他们选择的任何编辑器和 Chrome Web 工具调试应用程序。使用Node-Inspector,开发人员可以做一些很酷的事情,例如实时代码更改、步骤调试、范围注入和其他很酷的方面。要跟进这些方面,请在Github 上了解更多信息。
-
- Node.Js:小心新模块
你会在 Node.js 中遇到超过 35,000 个模块,但其中一些已经死了。随着 Node.js 在其主要版本中反复更改其 API,工作起来很混乱。该模块在v0.8.x下工作可能会在v0.10.x下中止。因此,在开始使用新模块之前,您应该检查 PR 列表以确保它没有错误或正在维护。
-
- Node.Js:节点包管理器是一个奇迹
Node Package Manager 是 Node.js 的所有部署系统的根,在 PaaS(平台即服务)提供者的基础上简化了库依赖项的管理。Node 带有惊人的 npm,它可以安装你的 package.json 清单文件中指定的模块。好吧,在这种情况下,新手会使用他们使用的所有模块更新 package.json。每次打开包并使用新模块更新依赖项属性都很痛苦,但是 npm 会为您做到这一点!
因此,最好运行 npm install,保存模块名称,然后 npm 会自动使用正确的模块和版本名称更新 package.json。
-
- Node.js:小心错误
对于新手来说,重要的是要记住节点很容易因为一个错误而崩溃。因此,我们建议新手和专家正确处理错误并针对错误抛出正确的消息。使用 try-catch 框会减慢您的进程,因此请避免使用它。
-
- Node.js:不要忘记返回
大多数初学者在回调后忘记返回。虽然有时这根本没有任何意义,但有时您会遇到奇怪的问题,因为您可能会收到两次回调。
让我们看一个例子
——1| 函数做(错误,结果,回调){
2| 如果(错误){
3| 回调(“错误”);
4| }
5| 回调(“好”);
6| }
片段确实有意义。如果发现“错误”,则在回调中发送,如果没有则发送良好。但是,调用回调并不是阻止执行完成的好方法,它会继续调用回调。
Node.js:结论
今天,我们经常使用 Node.js 创建实时应用程序。您必须在某些项目(例如 API 或网络项目)中寻找它们的未来用途,对它们来说,Node.js 将被证明是一个很好的部署模型。凭借其预先格式化的异步代码和易于选择的语言,Node.js 是一个非常受欢迎的选择。