Hướng dẫn nodejs global variable - biến toàn cục nodejs

Hướng dẫn nodejs global variable - biến toàn cục nodejs

Hướng dẫn dùng alphabetic text trong PHP

(PHP 4, PHP 5, PHP 7, PHP 8)rand — Génère une valeur aléatoireDescriptionrand(): intrand(int $min, int $max): int Appelée sans les options min et max, rand() retourne un nombre pseudoaléatoire ...

Hướng dẫn dùng web3.js JavaScript

Blockchains vẫn đang là xu hướng và ngành này đang thu hút rất nhiều lập trình viên. Bạn sẽ phải thật sự chuyên tâm vào việc học của mình nếu bạn muốn ...

What is final and static keyword in php?

❮ PHP KeywordsExampleCreate and use static properties and methods:

Hướng dẫn path get filename nodejs

How can I get the file name from an absolute path in Nodejs?e.g. foo.txt from /var/www/foo.txtI know it works with a string operation, like fullpath.replace(/.+//, ), but I want to know is ...

Hướng dẫn promise trong php

Promise.race([blueTuktuk, greenMotobike, redTractor]) -- Hình minh họa của Ken WongChời, thời này ai xài Promise nữa. Chuẩn bây giờ là async/await. -- Ai đó trên mạngHãy ...

Hướng dẫn dùng finaal trong PHP

Tiếp tục với series PHP hướng đối tượng bài này chúng ta sẽ tìm hiểu về 2 khái niệm khá là hay trong hướng đối tượng nói chung và PHP hướng đối tượng ...

Hướng dẫn view engine nodejs

EJSEJSĐầu tiên để tạo demo cho bài viết này ta cần phải tạo một project base với ExpressJS NodeJS nhé. Để tạo nhanh nhất mình dùng express-generator.sudo npm ...

Hướng dẫn socket io nodejs

Chào mọi người!Mở bàiĐôi điều chia sẻ trước khi đi vào nội dung chính của bài viếtHôm nay là bài viết đầu tiên mình được viết trên Viblo.asia. Mình sẽ ...

Hướng dẫn dùng assignements JavaScript

Assignment javascript nâng cao hướng dẫn dùng json server, tạo dữ liệu. Thực hiện trang chủ, chi tiết sản phẩm, giỏ hàng, quản trị dữ liệu…Thực hiện một ...

Hướng dẫn dùng drop def python

python Return trong Python Function trong Python Hàm trong Python Bài Viết Liên Quan Hướng dẫn dùng the markers pythonHướng dẫn dùng define rounded pythonHướng dẫn dùng ...

Hướng dẫn dùng function type python

Trong bài này chúng ta sẽ tìm hiểu về function trong Python, bạn sẽ được học khái niệm về function là gì? cách khai báo và đặt tên function như thế nào? Sau đó ...

Hướng dẫn dùng https://is.gd trong PHP

Thỉnh thoảng, bạn sẽ phải chuyển các URL giữa các trang net và dịch vụ khác nhau. Nghe có vẻ như một nhiệm vụ khá dễ dàng vì URL về cơ bản chỉ là các ...

Các biến toàn cầu có thể được sử dụng trong nút khi được sử dụng một cách khôn ngoan.when used wisely.

Tuyên bố các biến toàn cầu trong nút:

a = 10;
GLOBAL.a = 10;
global.a = 10;

Tất cả các lệnh ở trên các hành động giống nhau với các cú pháp khác nhau.

Sử dụng các biến toàn cầu khi chúng không được thay đổi

Ở đây một ví dụ về một cái gì đó có thể xảy ra khi sử dụng các biến toàn cầu:

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});

Explained:

Chạy người dùng định tuyến trước và nhận 10;

Sau đó chạy tuyến quyền và nhận 11;

Sau đó chạy lại tuyến đường của người dùng và nhận 11 thay vì 10;

Các biến toàn cầu có thể bị vượt qua!

Bây giờ hãy suy nghĩ về việc sử dụng đối tượng Res Express và gán Res như toàn cầu .. và bạn kết thúc với lỗi async bị hỏng và máy chủ bị tắt.

Khi nào nên sử dụng vars toàn cầu?

Như tôi đã nói - khi VAR không được thay đổi. Dù sao, bạn nên sử dụng đối tượng process.env từ tệp cấu hình.

Này các bạn, trong bài viết hôm nay, tôi muốn nói về các biến toàn cầu trong nút. Bài viết này nhằm vào các nhà phát triển đang ở mức độ mới bắt đầu đến cấp độ kỹ năng trung gian làm việc với nút. Nếu bạn chưa bao giờ nghe nói về các biến toàn cầu hoặc làm việc với chúng, không cần phải lo lắng. Bài viết này sẽ giúp bạn và chạy ngay lập tức với mọi thứ bạn cần biết về các biến toàn cầu.

Biến toàn cầu là gì?

Các biến toàn cầu rất giống nhau, nếu không giống hệt nhau, với các biến thường xuyên. Các biến toàn cầu có thể được khởi tạo với một giá trị, giá trị đó có thể được thay đổi và thậm chí chúng có thể được xóa như một biến thông thường. Sự khác biệt giữa một biến thường xuyên và một biến toàn cầu đi xuống phạm vi của chúng. Khi bạn tạo một biến trong tệp JavaScript, các biến đó chỉ tồn tại trong phạm vi mà nó đã được khai báo. Bây giờ tôi có nghĩa là gì? Trong mã bên dưới, bạn có thể thấy một ví dụ về hai biến khác nhau với các phạm vi khác nhau.

// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";

Trong đoạn mã ở trên, chúng ta có thể thấy rằng có hai biến, fileScopelocalScope. Biến fileScope có thể được thay đổi hoặc gọi từ bất cứ nơi nào trong tệp này, trong khi biến localScope chỉ tồn tại bên trong hàm

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
1. Tôi chắc chắn rằng tại thời điểm này, bạn đang tự hỏi điều này có liên quan gì đến các biến toàn cầu. Khi chúng ta nói về các biến toàn cầu, chúng tồn tại cho tất cả các tệp trong một chương trình có nghĩa là chúng có phạm vi toàn cầu cho chương trình.

Lý do điều này là có thể là do các chương trình JavaScript chia sẻ một không gian tên toàn cầu giữa tất cả các tệp trong chương trình. Để đặt nó theo cách khác, hãy tưởng tượng rằng chương trình của bạn là một tệp hoặc container khổng lồ đã "nhập" tất cả các tệp JavaScript khác. Sau đó, bạn khai báo một biến trong tệp container lớn này, biến đó hiện có phạm vi trong toàn bộ chương trình. Nếu bạn không chắc chắn một không gian tên là gì hoặc bạn muốn tìm hiểu thêm về chúng, hãy xem bài viết này để tìm hiểu thêm.

Cách khai báo và sử dụng biến toàn cầu

Bây giờ chúng ta đã hiểu rõ hơn về biến toàn cầu trong Node là gì, hãy nói về cách chúng ta thực sự thiết lập và sử dụng một biến toàn cầu. Để thiết lập một biến toàn cầu, chúng ta cần tạo nó trên đối tượng toàn cầu. Đối tượng toàn cầu là những gì cung cấp cho chúng tôi phạm vi của toàn bộ dự án, thay vì chỉ là tệp (mô -đun) mà biến được tạo trong khối mã bên dưới, chúng tôi tạo một biến toàn cầu có tên

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
2 và chúng tôi cung cấp cho nó một giá trị. Tiếp theo, chúng tôi thay đổi giá trị của
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
2, và cuối cùng chúng tôi đặt nó thành không xác định.

// Global.js

global.globalString = "This can be accessed anywhere!";
console.log(globalString); // Output: "This can be accessed anywhere!"

globalString = "Check me out now";
console.log(globalString); // Output: "Check me out now"

globalString = undefined;
console.log(globalString); // Output: undefined
// Example.js
 
// We can use the global we created in Global.js in this file 
// as well.
console.log(globalString); // Output: undefined
 
globalString = “We can change it too!"; 
console.log(globalString); // Output: "We can change it too!"

Những gì tôi chưa nói đến là một cách khác mà bạn có thể tạo ra một biến đổi toàn cầu. Lý do tôi đã loại trừ điều này là vì nó không phải là một cách thích hợp để thiết lập một biến. Nếu bạn khai báo một biến trong một tệp mà không sử dụng từ khóa

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
4 và sau đó gán một giá trị cho nó, đối tượng toàn cầu sẽ đặt một thuộc tính cho biến này. Quá trình này về cơ bản biến nó thành một biến có thể truy cập toàn cầu. Tôi thực sự khuyên bạn không nên sử dụng phương pháp này mặc dù nó không phải là cách thích hợp để tạo ra toàn cầu. Cũng cần lưu ý rằng nếu bạn đặt Chỉ thị
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
5, nút sẽ vô hiệu hóa các toàn cầu ngầm và bạn có thể sẽ gặp lỗi trong thời gian chạy thay vì tập lệnh làm việc.

Các trường hợp sử dụng thực tế cho các biến toàn cầu

Bây giờ, bạn có thể nghĩ rằng bản thân bạn muốn đi ra và tạo ra các biến toàn cầu bây giờ mà bạn biết nhiều hơn về chúng. Tôi sẽ thận trọng mạnh mẽ chống lại việc tạo ra các biến toàn cầu vì một vài lý do rất quan trọng.

Lý do đầu tiên là khi bạn tạo một biến toàn cầu, nó tồn tại trong suốt vòng đời của ứng dụng. Khi một biến tồn tại trong suốt vòng đời của ứng dụng, điều đó có nghĩa là nó ở đó, trong bộ nhớ, chiếm tài nguyên trong khi ứng dụng đang chạy.

Thứ hai, theo truyền thống sử dụng các biến toàn cầu có thể gây ra các vấn đề đồng thời. Nếu nhiều luồng có thể truy cập cùng một biến và không có trình sửa đổi truy cập hoặc thất bại tại chỗ, nó có thể dẫn đến một số vấn đề nghiêm trọng của hai luồng cố gắng truy cập và sử dụng cùng một biến. Tuy nhiên, trong khi đây là trường hợp trong các ngôn ngữ khác, nhưng nó không nhất thiết là trường hợp của Node.js vì nó hoàn toàn là một môi trường duy nhất. Mặc dù có thể phân cụm các quy trình nút, nhưng không có cách nào để giao tiếp giữa chúng.

Lý do cuối cùng tôi sẽ nói đến là việc sử dụng Globals có thể gây ra sự kết hợp ngầm giữa các tệp hoặc biến. Khớp nối không phải là một điều tốt khi viết mã tuyệt vời. Khi viết mã, chúng tôi muốn đảm bảo rằng nó càng mô -đun và có thể tái sử dụng càng tốt, đồng thời đảm bảo rằng nó dễ sử dụng và hiểu. Kết hợp các đoạn mã của bạn với nhau có thể dẫn đến một số cơn đau đầu lớn xuống đường khi bạn đang cố gắng gỡ lỗi tại sao một cái gì đó không hoạt động.

Nếu bạn muốn biết thêm về lý do tại sao Globals không được khuyến nghị, bạn có thể xem bài viết tuyệt vời này có tên là Biến toàn cầu là xấu.

Nếu bạn cảm thấy bối rối về mục đích của các biến toàn cầu, đừng sợ. Chúng tôi sẽ xem xét một vài biến số toàn cầu được tích hợp vào nút và cố gắng hiểu rõ hơn về lý do tại sao chúng là toàn cầu và cách chúng được sử dụng. Trên thực tế, có lẽ bạn đã sử dụng một vài trong số chúng mà thậm chí không nhận ra rằng chúng là đối tượng toàn cầu!

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

// Node Globals

console.log("Hello World!");

process.env.PORT = 3000;

setInterval({
  console.log("2 seconds passed.");
}, 2000);

Nếu bạn xem xét khối mã trên, bạn có thể sẽ thấy ít nhất một trường hợp bạn đã sử dụng trước đây,

// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
6. Theo tài liệu nút, đối tượng console là toàn cầu có một vài phương pháp cho phép các nhà phát triển làm những việc như in nhật ký hoặc lỗi. Đào sâu hơn vào các tài liệu mà chúng ta có thể thấy rằng
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
7 thực sự là một ví dụ toàn cầu được cấu hình để ghi vào
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
8 và
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
9.

Điều này đưa chúng ta đến câu lệnh tiếp theo mà bạn thấy trong khối mã ở trên, đối tượng

// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
0. Nếu bạn đã đưa ra một bản dựng sản xuất của một ứng dụng nút, thì có khả năng bạn đã phải đặt cổng cho biến môi trường. Biến môi trường
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
1 là một phần của đối tượng
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
0 là một toàn cầu khác. Bạn có thể truy cập các biến trên đối tượng
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
0 trong bất kỳ tệp nào trong dự án của bạn vì nó là toàn cầu. Nếu đối tượng này không toàn cầu, đối tượng
// app.js
a = 10; // no var or let or const means global

// users.js
app.get("/users", (req, res, next) => {
   res.send(a); // 10;
});

// permissions.js
app.get("/permissions", (req, res, next) => {
   a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
   res.send(a); // 11;
});
7 cũng sẽ không thể truy cập được từ bất kỳ tệp nào, hãy nhớ rằng nó thực sự là một đối tượng đề cập đến đối tượng
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
0.

// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
6 là một chức năng khác mà bạn có thể đã thấy trước đây nếu bạn có lý do để trì hoãn một hoạt động trước khi thực hiện nó.
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
7 và
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
8 có bản chất tương tự như
// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
6 và cả hai đều là chức năng toàn cầu. Ba chức năng này là một phần của mô -đun hẹn giờ hiển thị API toàn cầu cho phép bạn gọi các chức năng này mà không yêu cầu hẹn giờ trong các tệp của bạn một cách rõ ràng.

Tất cả các trường hợp sử dụng được đề cập ở trên được tích hợp vào nút và là toàn cầu vì một lý do. Đối tượng

// Scope.js

let fileScope = "Can be accessed anywhere in the file";

function doSomething() {
    let localScope = "Can only be accessed inside this function";
    fileScope = "Can be accessed in the function too!";
}

// This will result in an error because the variable does not exist
// outside the function.
localScope = "Try and change me here";
0 là toàn cầu vì nó cung cấp thông tin về quy trình nút chạy hiện tại và do đó nên có sẵn từ bất kỳ tệp nào mà không cần phải yêu cầu. Điều tương tự có thể được nói về mô -đun hẹn giờ có chứa một số chức năng quan trọng và cần được truy cập ở bất cứ đâu mà không cần phải yêu cầu. Nếu bạn muốn tìm hiểu thêm về các đối tượng toàn cầu hiện có được tích hợp vào nút, tôi khuyến khích bạn truy cập tài liệu chính thức trên Globals.

Tìm hiểu thêm

Bạn muốn tìm hiểu thêm về các nguyên tắc cơ bản của Node.js? Cá nhân, tôi muốn giới thiệu một khóa học trực tuyến, như Wes Bos 'Learn Node.js vì các video dễ theo dõi hơn nhiều và bạn sẽ thực sự có thể xây dựng một ứng dụng trong thế giới thực.

Sự kết luận

Tôi biết đó là khá nhiều thông tin, vì vậy cảm ơn bạn đã dán nó ra. Tất cả các thông tin trên đã được tìm thấy trong tài liệu trên trang web của Node. Xin vui lòng đặt câu hỏi và đưa ra nhận xét trong phần bình luận dưới đây. Cho đến lần sau các chàng trai!