Nút. js được xây dựng bằng chương trình C++ với công cụ V8 được nhúng trong đó để cung cấp môi trường thực thi JavaScript bên ngoài trình duyệt. Nhiều phương thức toàn cầu có thể truy cập thực sự là các trình bao bọc xung quanh các phương thức thực hiện lệnh gọi đến các thư viện C cốt lõi Show Nút. js có nhiều số nhận dạng toàn cầu được xây dựng sẵn có sẵn và được các nhà phát triển biết đến. Ngoài ra còn có một số có thể truy cập ở cấp mô-đun thông qua kế thừa mô-đun Rất ít các đối tượng toàn cầu là
Một số hạt có thể truy cập thông qua kế thừa mô-đun là mô-đun, xuất, __filename, __dirname, require(), v.v. Trong bài viết này, chúng tôi cố gắng hiểu thêm về đối tượng 'quy trình' và các chi tiết của nó với các ví dụ. Đối tượng 'tiến trình' là một đối tượng toàn cầu, là một thể hiện của EventEmitter và có thể được truy cập trực tiếp. Nó cũng có thể được truy cập rõ ràng bằng cách sử dụng mô-đun toàn cầu i. e. yêu cầu const process = require(‘process’); đối tượng process có một thuộc tính 'argv' là một mảng chứa các thuộc tính được truyền cho node process Tạo một chỉ mục đơn giản. js và cho phép bảng điều khiển. đăng nhập quá trình. argv bảng điều khiển. nhật ký (quá trình. argv) Nhập vào 'chỉ mục nút. js' trong thiết bị đầu cuối. Khi nhấn Enter, đầu ra sau sẽ được cung cấp [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ] Bây giờ, hãy chuyển vào một số tham số khác và bạn sẽ thấy các tham số được hiển thị với nội dung 'chỉ mục nút. kiểm tra js'. var fs = require('fs') fs.createReadStream(__filename).pipe(process.stdout); Chạy 'chỉ mục nút. js' sẽ hiển thị nội dung của tệp. Một điều thú vị khác về Node. js là khi nó hoàn thành hoặc không còn gì để làm, thì nó sẽ thoát ra khỏi quy trình. Hãy hiểu điều này với một ví dụ setTimeout(() => { process.stdout.write('Executed after 1000 ms' + '\n'); }, 1000) Cái này sẽ đợi trong 1 giây và sau đó xuất ra 'Đã thực hiện sau 1000 ms' và kết thúc quá trình Nếu chúng tôi muốn quá trình chạy mãi mãi, thì chúng tôi có thể thay thế setTimeout bằng setInterval sẽ thực hiện gọi lại mỗi lần, đăng khoảng thời gian. Và cách duy nhất để thoát là nhấn 'Ctrl + C' hoặc quá trình bị lỗi Để xem nhanh các thuộc tính, phương thức và sự kiện trên đối tượng quy trình, hãy thêm 'bàn điều khiển. nhật ký (quy trình)' trong chỉ mục. js và chạy chỉ mục nút. js. Hầu hết trong số họ là tự giải thích theo tên của họ version: 'v12.20.1', //current version of node versions: {…}, // gives insight about the node and its core components like V8 engine version arch: 'x64', platform: 'darwin', release: {…}, // details of node source and version of lts. moduleLoadList: [...], // details of modules available with node. binding: [Function: binding], _events: [Object: null prototype] { newListener: [Function: startListeningIfSignal], // whenever a new listener is added removeListener: [Function: stopListeningIfSignal], // existing listener is removed warning: [Function: onWarning], SIGWINCH: [Function] }, _eventsCount: 4, _maxListeners: undefined, domain: null, _exiting: false, config: { target_defaults: {…}, variables: {...} }, cpuUsage: [Function: cpuUsage], resourceUsage: [Function: resourceUsage], memoryUsage: [Function: memoryUsage], kill: [Function: kill], exit: [Function: exit], openStdin: [Function], getuid: [Function: getuid], geteuid: [Function: geteuid], getgid: [Function: getgid], getegid: [Function: getegid], getgroups: [Function: getgroups], allowedNodeEnvironmentFlags: [Getter/Setter], assert: [Function: deprecated], features: {…}, setUncaughtExceptionCaptureCallback: [Function: setUncaughtExceptionCaptureCallback], hasUncaughtExceptionCaptureCallback: [Function: hasUncaughtExceptionCaptureCallback], emitWarning: [Function: emitWarning], nextTick: [Function: nextTick], stdout: [Getter], stdin: [Getter], stderr: [Getter], abort: [Function: abort], umask: [Function: wrappedUmask], chdir: [Function: wrappedChdir], cwd: [Function: wrappedCwd], initgroups: [Function: initgroups], setgroups: [Function: setgroups], setegid: [Function], seteuid: [Function], setgid: [Function], setuid: [Function], env: {…}, // environment details for the node application title: 'node', argv: [ '/Users/srgada/.nvm/versions/node/v12.20.1/bin/node', '/Users/srgada/index.js' ], execArgv: [], pid: 29708, ppid: 19496, execPath: '/Users/srgada/.nvm/versions/node/v12.20.1/bin/node', debugPort: 9229, argv0: 'node', mainModule: Module {…} //details of the main starting file or module. This is deprecated in latest one and use require.main instead } Chúng ta hãy xem xét một số thuộc tính được sử dụng hoặc yêu cầu nhiều nhất
Một số phương pháp phổ biến là
process.nextTick(() => { console.log('Got triggered in the next iteration of event loop'); }); setTimeout(() => { console.log("Even after nextTick is executed"); }, 0); console.log("First text to be printed"); đầu ra. First text to be printed Got triggered in the next iteration of event loop Executed after some delay SỰ KIỆN. console.log(process.argv); process.on('exit', () => { console.log('Perform any clean up like saving or releasing any memory'); }); Thoát được kích hoạt sau khi vòng lặp sự kiện kết thúc. Do đó, chúng tôi không thể thực hiện bất kỳ công việc không đồng bộ nào trong trình xử lý. Vì vậy, nếu bạn muốn thực hiện một số lệnh gọi như lưu nội dung vào db, chúng ta có thể nối với 'beforeExit' khi quá trình này kết thúc ________số 8Một sự kiện khác 'uncaughtException', như tên gợi ý, được đưa ra khi có một ngoại lệ chưa được xử lý trong ứng dụng. Bất cứ khi nào một ngoại lệ chưa được xử lý được tìm thấy, Node. ứng dụng js ghi nhật ký tăng và thoát ngăn xếp process.on('exit', () => { console.log('Perform any clean up like saving or releasing any memory'); }); process.on('uncaughtException', (err) => { console.error('An unhandled exception is raised. Look at stack for more details'); console.error(err.stack); process.exit(1); }); var test = {}; //raises an exception. test.unKnownObject.toString(); đầu ra [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]0 Tương tự như 'uncaughtException', một khái niệm mới hơn được gọi là lỗi unhandledRejection được giới thiệu. Điều này được nêu ra nếu một lời hứa bị từ chối và không có người xử lý phản hồi Trong cả hai trường hợp, ứng dụng sẽ bị sập và không nên tiếp tục. Một lý do có thể là ứng dụng có thể ở trạng thái không xác định. Nếu bạn đang thắc mắc tại sao ai đó sẽ móc vào sự kiện này, thì đó là để thực hiện dọn dẹp đồng bộ các tài nguyên được phân bổ (e. g. mô tả tệp, xử lý, v.v.) trước khi tắt quy trình Ghi chú. Sự kiện 'beforeExit' không được kích hoạt khi có 'uncaughtException' hoặc quá trình. thoát được gọi một cách rõ ràng Sự kiện tín hiệu. Các sự kiện do hệ điều hành phát ra cho Node. js được gọi là tín hiệu. Phổ biến nhất trong số đó là SIGTERM và SIGINT. Cả hai đều liên quan đến việc chấm dứt quá trình. Tín hiệu không có sẵn cho chuỗi công nhân. Hãy xem xét một ví dụ cho SIGINT [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]1 Trong thiết bị đầu cuối, thực hiện chỉ mục nút. js. Đây sẽ là một quá trình liên tục mà không có bất kỳ tiêu chí thoát nào vì setInterval. Nhấn Ctrl+C, kết quả là sự kiện 'SIGINT' được nâng lên ứng dụng nút và được ghi lại trong trình xử lý. Vì quy trình. lệnh thoát trong trình xử lý, quá trình thoát Nút. js là một tiến trình đơn luồng. Và trong một số trường hợp, bạn có thể muốn một số logic cụ thể được chạy trong tiến trình con chứ không phải trong tiến trình chính, để nếu có bất kỳ sự cố nào xảy ra thì tiến trình chính vẫn hoạt động Lấy ví dụ trước về hiển thị nội dung của chỉ mục. js, hãy thực hiện lần này với sự trợ giúp của mô-đun ‘child_ process’ [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]2 Ghi chú. cat là một tệp nhị phân có sẵn trên iOS. Điều này có thể thay đổi dựa trên hệ điều hành của bạn. [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]3 Tổng quan
đầu ra. [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]4 Như chúng ta đã biết trước đó, tất cả thiết bị xuất chuẩn là một luồng và chúng ta có thể tạo đường dẫn con. stdout cho phụ huynh. thiết bị xuất chuẩn trực tiếp thay vì lắng nghe sự kiện thay đổi dữ liệu. Thay dòng 7,8,9 bằng cái này [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]5 Một phiên bản tốc ký khác là cung cấp các tham số thứ 3 cho lần sinh sản mà không cần đường ống như hình bên dưới. [về cơ bản, nó kế thừa allstdio từ cha mẹ và thực hiện đường dẫn cho bạn] [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]6 Lưu ý rằng, mỗi tiến trình con là khép kín và dữ liệu không được chia sẻ giữa nhiều tiến trình con hoặc tiến trình cha. Điều gì sẽ xảy ra nếu bạn muốn chuyển dữ liệu hoặc kiểm soát quy trình con như chấm dứt nếu cần? Tham số thứ ba của spawn chứa stdio về cơ bản là một mảng với stdIn, stdOut và stdErr. Truyền null sẽ lấy giá trị mặc định. Chúng ta có thể chuyển vào mục thứ tư 'ống' giúp gửi dữ liệu từ tiến trình con [ '/Users/***/.nvm/versions/node/v12.20.1/bin/node', '/Users/***/index.js' ]7 Từ đoạn mã trên, chúng ta có thể thấy rằng con tạo một ổ cắm với cha mẹ và gửi dữ liệu. Phụ huynh đang lắng nghe nó và thực hiện thao tác được yêu cầu. e. chấm dứt tiến trình con Phần kết luận Nút. js là một hiệu suất đơn luồng, không chặn và hoạt động tốt cho một quy trình. Nhưng nếu chúng ta muốn mở rộng quy mô và có một ứng dụng phân tán thì sao? . Để khắc phục điều này, Node. js phải hoạt động với nhiều quy trình và thậm chí trên nhiều máy Quy trình trong NodeJS là gì?Đối tượng process trong Node. js là một đối tượng toàn cầu có thể được truy cập bên trong bất kỳ mô-đun nào mà không yêu cầu nó . Có rất ít đối tượng hoặc thuộc tính toàn cầu được cung cấp trong Node. js và process là một trong số đó. Nó là một thành phần thiết yếu trong Node.
Biến quy trình trong NodeJS là gì?Trong nút. js, quy trình. env là biến toàn cục được đưa vào trong thời gian chạy . Nó là một cái nhìn về trạng thái của các biến môi trường hệ thống. Khi chúng tôi đặt một biến môi trường, nó sẽ được tải vào quy trình.
Làm cách nào để sử dụng process env trong NodeJS?Bạn có thể truy cập các biến môi trường trong Node. js ngay lập tức. Khi nút của bạn. js khởi động, nó sẽ tự động cung cấp quyền truy cập vào tất cả các biến môi trường hiện có bằng cách tạo đối tượng env trong đối tượng chung của quy trình .
Quá trình đánh dấu trong NodeJS là gì?Khi ở trong Node JS, một lần lặp của vòng lặp sự kiện đã hoàn tất . Điều này được gọi là đánh dấu. tiến trình. nextTick() nhận chức năng gọi lại được thực thi sau khi hoàn thành lần lặp/đánh dấu hiện tại của vòng lặp sự kiện. Các giai đoạn của Vòng lặp sự kiện trong Node JS từ nodejs. tổ chức. |