Skip to content

Node.js:Example:Startup

종속성 없는 기본 프로젝트 생성시 참고할 Node.js Startup code.

app.js

#!/usr/bin/env node

var fs = require('fs');

// Default User's properties.
var config_path = __dirname + '/config.json';
var config = {
    'host': '0.0.0.0',
    'port': 8080,
    'root': __dirname + '/build',
    'log': {
        'type': 'console', // 'console', 'file'
        'dir': __dirname + '/log' // Used for 'file' type.
    }
};

if (fs.existsSync(config_path)) {
    config = JSON.parse(fs.readFileSync(config_path, 'utf8'));
    console.log('Read config: ' + config_path);
} else {
    console.log('Not found config: ' + config_path);

    webhook_home = process.env['WEBHOOK_HOME'];
    if (fs.existsSync(webhook_home)) {
        console.log('Read WEBHOOK_HOME env: ' + webhook_home);
        config['root'] = webhook_home;
    }
}

var source_dir = config['root'];
if (fs.existsSync(source_dir)) {
    console.log('Exists: ' + source_dir);
} else {
    fs.mkdirSync(source_dir);
    console.log('Create: ' + source_dir);
}

var log = {
    type: config['log']['type'].toLowerCase(),
    dir: config['log']['dir']
};

// Redirect log.
if (log.type == 'file') {
    if (fs.existsSync(log.dir) == false){
        fs.mkdirSync(log.dir);
    }

    console.log('Enable file logger: ' + log.dir);
    // var console_stdout_write = process.stdout.write;
    // var console_stderr_write = process.stderr.write;

    // intercept.
    process.stdout.write = (str, encoding, fg) => {
        fs.appendFile(log.dir + '/log.log', str, (err) => {});
    }
    process.stderr.write = (str, encoding, fg) => {
        fs.appendFile(log.dir + '/err.log', str, (err) => {});
    }
} else {
    console.log('Enable console logger.');
}

var sys  = require('url');
var http = require('http');

// ...

config.json

{
    'host': '0.0.0.0',
    'port': 8080,
    'log': {
        'type': 'file',
    }
}

See also