0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#——Node.js 中的模式和反模式

       Node.js 是基于 Chrome 的 V8 引擎构建的后端 JavaScript 运行时,它本质上是异步和事件驱动的。使用 Node.js 创建 REST API 并使用

       本文重点介绍构建 Node.js 应用程序时要遵循的一些模式和最佳实践。您将了解编码风格、错误处理、记录器和测试。

       Express.js等框架相对简单。这种简单性带来了很大的灵活性。但是,在构建可扩展的网络驱动应用程序时,您可能会在遵循哪些模式方面有所偏离。


Node.js 编码风格和最佳实践

​const​​​和​​let​​声明变量的关键字

在 JavaScript 中声明变量有不同的方法:老派​​var​​​和最近的​​let​​​和​​const​​.

​var​​声明函数范围的变量(在函数内声明时)或全局范围的变量(在函数外部声明时)。

​let​​​并​​const​​声明块范围的变量。

​let​​允许您创建其值可以更改的变量。当指向一个对象时,它可以被分配另一个对象。

let myInt = 3;
myInt = 6;
console.log(myInt); // 6
let myArray = [0, 1, 2, 3];
console.log(myArray); // [ 0, 1, 2, 3 ]
let myOtherArray = ["one", "two", "three"];
myArray = myOtherArray;
console.log(myArray); // [ 'one', 'two', 'three' ]

​const​​关键字可能有点混乱。它不一定定义一个常量值,它定义一个值的常量引用。它创建一个对值的只读引用,但这并不意味着它持有的值是不可变的,只是它不能被重新分配。

const myInt = 3;
myInt = 6; // TypeError: Assignment to constant variable.

const myArray = [0, 1, 2, 3];
console.log(myArray); // [ 0, 1, 2, 3 ]
myArray[0] = "eleven";
console.log(myArray); // [ 'eleven', 1, 2, 3 ]
let myOtherArray = ["one", "two", "three"];
myArray = myOtherArray; // TypeError: Assignment to constant variable

如上所示,如果它包含一个原语,则不能为其分配另一个值。当它包含一个对象/数组时,您可以更改该对象的值(其属性/元素),但不能为其分配另一个对象。

有了定义,让我们看看为什么应该考虑使用​​let​​and ​​const​​over ​​var​​。

  1. 使用重复的变量声明​​var​​不会触发错误。

您可以在与​​var​​类似名称的变量相同的范围内声明一个变量。因此,您可能会在不知不觉中覆盖另一个变量的值。

function thisFunction() {
var x = 1;

// In another part of the code, declare another variable x
var x = 2;

console.log(x); // 2
}

thisFunction();

两者​​const​​​和​​let​​都不能重新声明,因此您不会在同一范围内意外创建重复变量。

function thisFunction() {
let x = 1;

// In another part of the code, declare another variable x
let x = 2;

console.log(x);
}

thisFunction();

​如果您尝试运行上述代码,您将收到以下错误:

SyntaxError: Identifier 'x' has already been declared
  1. ​var​​允许您读取尚未声明的变量。

当您在声明之前尝试访问 a​​var​​时,它将返回​​undefined​​. 当您尝试在代码中使用尚未声明的变量时,这可能会导致错误。跟踪错误可能很困难,因为代码可能不会导致导致其崩溃的错误,但是当您使用​​undefined​​.

以下代码将运行良好。

console.log(bar); // undefined
var bar = 1;

使用​​let​​​and ​​const​​,您将无法使用尚未声明的变量。

console.log(foo); // ReferenceError
let foo = 2;

​尝试运行上述将给出以下错误:

ReferenceError: Cannot access 'foo' before initialization
  1. 因为它们是块范围的,​​let​​并且​​const​​使代码更易读和更直接,所以更不容易出错。使用块范围的变量,更容易阅读代码并跟踪变量操作的范围。您只需要查看声明它的最里面的块就知道它的范围。

看下面的代码。

let x = 5;

function thisFunction() {
let x = 1;

if (true) {
let x = 2;
}

console.log(x); // 1
}

thisFunction();

console.log(x); // 5

由于在语句​​let x = 2;​​块内​​if​​声明,您知道它只在该块内运行。如您所见,它不会影响块外类似命名的变量。您可以在块内声明变量,而不必担心您可能会重新声明它们。

使用时​​var​​,它不是那么简单。

var x = 5;

function thisFunction() {
var x = 1;

if (true) {
var x = 2;
}

console.log(x); // 2
}

thisFunction();

console.log(x); // 5

使用

在上面,我们​​var x = 2;​​在​​if​​语句中声明了一个变量。的范围​​x​​是整个函数​​thisFunction()​​。由于函数中有一个类似命名的变量,我们重新声明了​​x​​,当我们以后使用函数的​​x​​时,它就有了值​​2​​。因此,您需要注意范围内的变量,以免意外覆盖它们。

​var​​,您必须更加小心变量。


正确的命名约定

在应用程序中命名常量、变量、类和函数时,遵循命名约定非常重要。这有助于您在视觉上区分局部变量、全局变量、函数、类等,并在整个代码库中保持一致的风格。

要命名局部变量和函数,请使用 lowerCamelCase。

const myFunction() {
let someVariable;
}

即使您使用​​const​​关键字定义局部变量,也首选lowerCamelCase。

const myFunction() {
const someVariable = "That holds a string value";
}

在某些特定用例中, a 的​​const​​名称会有所不同。如果您打算声明一个常量,其值(或嵌套值,在声明对象的情况下)不会在代码库的整个生命周期中发生变化,请使用 UPPER_SNAKE_CASE。

const ANOTHER_VAR = 3;

​使用 UpperCamelCase 在 Node.js 应用程序中定义类:

class MyClass() {
// ...
}

遵循这些命名约定将帮助您编写更具可读性的代码。命名你的函数是至关重要的,尤其是当你要分析一个 Node.js 项目时。分析使您更容易理解检查内存快照时要查找的函数。但是,如果您使用匿名函数,分析可能会使调试生产问题变得具有挑战性。

举报

相关推荐

0 条评论