首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js备份任务

Node.js备份任务
EN

Code Review用户
提问于 2013-10-08 18:39:56
回答 1查看 1.7K关注 0票数 2

我正在寻找一些关于我的代码的布局和结构的一般反馈。基本上只是任何反馈,因为我对这段代码不太满意,但我不知道如何进一步改进它。

代码语言:javascript
复制
'use strict';

/* jshint node: true */

var fs         = require('fs');
var os         = require('os');
var nodemailer = require('nodemailer');
var rimraf     = require('rimraf');
var config     = require('../config');
var dropbox    = require('../lib/dropbox-sync');
var mysql      = require('../lib/mysql-backup');
var tarball    = require('../lib/tarball');
var transport  = nodemailer.createTransport('sendmail');

// This is the FILE name of the backup file
var backupFilename  = config.dropbox.mysql_prefix + 'backup-' + Date.now();

// This is the absolute file path to save the file to on Dropbox
var dropboxFilename = ['', config.server, config.dropbox.mysql_folder, backupFilename].join('/');

// Connect to Dropbox with our credentials
try {
  dropbox.connect({
    key: config.dropbox.key,
    secret: config.dropbox.secret
  });
} catch (err) {
  failWithDropboxError(err);
}

// Connect to MySQL with our credentials
try {
  mysql.connect({
    host: config.mysql.hostname,
    user: config.mysql.username,
    password: config.mysql.password
  });
} catch (err) {
  failWithMySQLError(err);
}

// Generate a MYSQL backup
mysql.backup(backupFilename, function (err, pathname, stats) {
  if (err) {
    return failWithMySQLError(err);
  }

  tarball.create(pathname, '/tmp/' + backupFilename + '.tar.gz', function (code) {
    rimraf.sync(pathname);

    dropbox.send('/tmp/' + backupFilename + '.tar.gz', dropboxFilename, function (err, response) {
      fs.unlinkSync('/tmp/' + backupFilename + '.tar.gz');

      if (err) {
        failWithDropboxError(err);
      } else {
        console.log(response);
        console.log('The MySQL backup has been completed successfully.\n');
        console.log('Backed up %d from %d databases.\n', stats.tables, stats.databases);
        console.log('The backup file has been saved to your Dropbox: %s', '');
      }
    });
  });
});

function failWithMySQLError (err) {
  console.error('The MySQL backup job has encountered a fatal error and could not continue.\n');
  console.error('We were unable to create the MySQL backup.\n');
  console.error(err);

  process.exit(1);
};

function failWithDropboxError (err) {
  console.error('The MySQL backup job has encountered a fatal error and could not continue.\n');
  console.error('We were unable to sync the MySQL backup to Dropbox.\n')
  console.error(err);

  process.exit(1);
};
EN

回答 1

Code Review用户

发布于 2013-10-28 16:58:03

您的代码看起来很好,格式也很好。只有几个小问题:

  • 您似乎尝试过用JSHint检查它,但是JSHint报告了一些关于您的代码的问题。特别是分号和未使用的变量。
  • 不清楚消息中何时需要字符"\n“,何时不需要。看上去有时候你只是忘了。
  • 这个看起来不一致。看起来有一个错误:console.log(‘备份文件已保存到您的Dropbox:%s','');
  • 这实际上是一个糟糕的模式:如果(err) {返回failWithMySQLError(err);}它会稍微缩短一段代码,但会给人留下一个印象,即函数的值很重要,而它并不重要。
  • 否则在这里是多余的: if (err) { failWithDropboxError(err);}err{
  • 正如您所看到的,冗长的代码行使代码评审变得更加复杂。
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/32430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档