Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
jtlapp committed Sep 13, 2016
1 parent b5ea272 commit 508f8c4
Show file tree
Hide file tree
Showing 4 changed files with 174 additions and 0 deletions.
30 changes: 30 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# OS X files
.DS_Store

# Logs
logs
*.log

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
47 changes: 47 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,49 @@
# node-cleanup

installs a cleanup handler that always runs on exiting node

## Installation

```
npm install node-cleanup --save
```

## Usage

nodeCleanup() installs a function that performs cleanup activities just before the node process exits. The cleanup function runs when the process exits normally, when the user presses *ctrl*-C, and when an exception is uncaught. The caller may specify the termination messages to use.

```js
var nodeCleanup = require('node-cleanup');

nodeCleanup(function () {
// release resources here before node exits
});
```

nodeCleanup() also ensures that ctrl-C is handled gracefully in contexts that already have exit handlers installed, such as Node Express. To receive just this benefit, the caller need not provide a cleanup handler.

By default, `nodeCleanup()` writes `[ctrl-C]` to `stderr` when interrupted and `Uncaught exception...` to `stderr` when an uncaught exception occurs. You may override either or both of these values in a second parameter:

```js
var nodeCleanup = require('node-cleanup');

nodeCleanup(function () {
// release resources here before node exits
}, { ctrl_C: '^C' });
```

## Reference

`nodeCleanup(cleanupHandler, messages)`

Install a cleanup handler that reliably runs when node exits. Both parameters are optional. Calling `nodeCleanup()` without a `cleanupHandler` still provides the benefit of ensuring that other installed exit handlers run on *ctrl*-C.

| Param | Description |
| --- | --- |
| cleanupHandler | A function that performs the final cleanup of resources before the node process exits. The function may write to `stderr` and `stdout`. It takes no parameters and can't abort the exit. The handler is optional, defaulting to a function that does nothing. |
| messages | An optional object mapping any of the keys `ctrl_C` and `uncaughtException` to the message strings that output to stderr. Set a message to the empty string `''` to prevent output to `stderr` for its case. Default messages are provided omitted messages. |

## Credit

This code was borrowed and modified from [CanyonCasa](http://stackoverflow.com/users/3319552/canyoncasa)'s answer to a stackoverflow question. I found the code necessary for all my node projects. See [the stackoverflow answer](http://stackoverflow.com/a/21947851/650894) for more examples of use.

61 changes: 61 additions & 0 deletions node-cleanup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/**
* nodeCleanup() installs a function that performs cleanup activities just
* before the node process exits. The cleanup function runs when the process
* exits normally, when the user presses ctrl-C, and when an exception is
* uncaught. The caller may specify the termination messages to use.
*
* nodeCleanup() also ensures that ctrl-C is handled gracefully in contexts
* that already have exit handlers installed, such as Node Express. To
* receive just this benefit, the caller need not provide a cleanup handler.
*
* This code was borrowed and modified from CanyonCasa's answer to a
* stackoverflow question. I found the code necessary for all my node
* projects. See the stackoverflow answer for example usage:
* http://stackoverflow.com/a/21947851/650894
*
* @param cleanupHandler A function that performs the final cleanup of
* resources before the node process exits. The function may write to
* stderr and stdout. It takes no parameters and can't abort the exit.
* The handler is optional, defaulting to a function that does nothing.
* @param messages An optional object mapping any of the keys `ctrl_C` and
* `uncaughtException` to the message strings that output to stderr.
* Set a message to the empty string '' to prevent output to stderr
* for its case. Default messages are provided omitted messages.
*/

module.exports = function nodeCleanup(cleanupHandler, messages) {

messages = messages || {};
if (typeof messages.ctrl_C !== 'string')
messages.ctrl_C = '[ctrl-C]';
if (typeof messages.uncaughtException !== 'string')
messages.uncaughtException = 'Uncaught exception...';

// attach user callback to the process event emitter.
// if no callback, it will still exit gracefully on Ctrl-C
cleanupHandler = cleanupHandler || noOp;
process.on('cleanup', cleanupHandler);

// do app-specific cleaning before exiting
process.on('exit', function () {
process.emit('cleanup');
});

// catch ctrl+c event and exit normally
process.on('SIGINT', function () {
if (messages.ctrl_C !== '')
process.stderr.write(messages.ctrl_C + "\n");
process.exit(2);
});

//catch uncaught exceptions, trace, then exit normally
process.on('uncaughtException', function(e) {
if (messages.uncaughtException !== '') {
process.stderr.write(messages.uncaughtException + "\n");
process.stderr.write(e.stack + "\n");
}
process.exit(99);
});
};

function noOp() {}; // for just the benefit of graceful SIGINTs
36 changes: 36 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "node-cleanup",
"version": "1.0.0",
"description": "installs a cleanup handler that always runs on exiting node",
"main": "node-cleanup.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/jtlapp/node-cleanup.git"
},
"keywords": [
"node",
"exit",
"cleanup",
"sigint",
"ctrl-c"
],
"author": "",
"contributors": [
{
"name": "CanyonCasa",
"url": "http://stackoverflow.com/users/3319552/canyoncasa"
},
{
"name": "Joseph T. Lapp",
"email": "arachnojoe@gmail.com",
"url": "http://josephtlapp.com"
}
],
"bugs": {
"url": "https://github.com/jtlapp/node-cleanup/issues"
},
"homepage": "https://github.com/jtlapp/node-cleanup#readme"
}

0 comments on commit 508f8c4

Please sign in to comment.