2012-02-08 36 views
9

Tôi đang làm việc trên một dự án nút nơi tôi muốn viết một số bộ nhớ để lưu trữ khi thoát. Tôi thấy nó đơn giản như:Xử lý sự kiện CTRL + C trong Node.js trên Windows

process.on('exit', function() { 
//handle your on exit code 
console.log("Exiting, have a nice day"); 
}); 

Tuy nhiên, mã này không thực thi (trên Windows) khi CTRL + C được nhận. Do đây là cách defacto để thoát khỏi Node, điều này có vẻ hơi rắc rối.

Tại thời điểm này tôi đã cố gắng để xử lý các tín hiệu thay vào đó, mà kết quả trong các lỗi (trên ('SIGINT', ...).):

node.js:218 throw e; // process.nextTick error, or 'error' event on first tick ^Error: No such module at EventEmitter. (node.js:403:27) at Object. (C:\Users\Mike\workspace\NodeDev\src\server.js:5:9) at Module._compile (module.js:434:26) at Object..js (module.js:452:10) at Module.load (module.js:353:32) at Function._load (module.js:310:12) at Array.0 (module.js:472:10) at EventEmitter._tickCallback (node.js:209:41)

Off để nhanh chóng trên Google và it appears Node đơn giản không xử lý tín hiệu trên Windows và CTRL + C không thực tế kích hoạt sự kiện "thoát". Lỗi trên không nên thoát trên hệ thống * Nix.

Tuy nhiên, việc tắt nền tảng Windows không phải là tùy chọn hợp lệ cho tôi, vì vậy tôi cần giải pháp thay thế. Có cách nào để xử lý Trên các sự kiện Thoát trong Nút do người dùng nhấn CTRL + C gây ra để chấm dứt tập lệnh không?

Trả lời

11

Tôi đã sử dụng đoạn mã này để nghe các phím. Dường như nó cũng hoạt động trên CTRL + C trên Windows.

Nhưng sau đó lại chỉ hoạt động đối với CTRL + C làm tổ hợp phím, không phải bất kỳ thứ gì khác. Tất nhiên, bạn có thể vừa kết hợp hàm với số process.on("exit" và gọi hàm đó bên trong khối if bên dưới.

var tty = require("tty"); 

process.openStdin().on("keypress", function(chunk, key) { 
    if(key && key.name === "c" && key.ctrl) { 
    console.log("bye bye"); 
    process.exit(); 
    } 
}); 

tty.setRawMode(true); 
+1

Giải pháp tốt. Cảm thấy một chút ... bẩn, nhưng sau đó, làm việc xung quanh thường xuyên làm! Cảm ơn. – Serapth

Các vấn đề liên quan