业务需要,需在客户本地建立一个服务,将本地的数据库文件发送到主服务器。
下面是本地服务代码:
var exec = require('child_process').exec; var request = require('request'); var fs = require('fs'); exec('./mysqlout.bat', function (err, stdout, stderr) { if (err) { console.error(err); return; } request.post('http://120.11.xx.19:3000/upload', { formData: { title: 'upload sqlfile', description: 'Sent on ' + new Date(), is_public: 1, sqlfiles: fs.createReadStream('f:/beijian.sql') }, json: true }, function(err, res, body) { console.log('返回: ' + body); return; }) });
远程端主服务代码:
//express框架 app.js: //引入copyDB文件 var copyDB = require('./routes/copyDB'); //新建路由 app.use('/upload', copyDB); codyDB.js: var express = require('express'); var router = express.Router(); var debug = require('debug')('Web:server'); var MULTIPARTY = require('multiparty'); var exec = require('child_process').exec; var FS = require('fs'); var CONFIG = require('../config'); var copyDB = function(req, res, next) { //接收文件的方式用multiparty包 var form = new MULTIPARTY.Form({ uploadDir: "./appData/sqlFile/"// 接收文件后存储的路径,文件名是一串字符串,下面用fs.rename方法改名 }); form.parse(req, function(err, fields, files) { if (err) { debug("upload failed!" + err); res.send('upload failed!'); return; } else { debug('upload success!'); res.send('upload success!'); var inputFile = files.sqlfiles[0]; var uploadedPath = inputFile.path; var dstPath = './appData/sqlFile/' + 'new' + '.sql'; FS.rename(uploadedPath, dstPath, function(renameerr) { if (renameerr) { debug('rename error: ' + err); return; } else { debug('rename ok'); } }) } }); }; router.post('/', copyDB); module.exports = router;