Header Ads Widget

Ticker

6/recent/ticker-posts

Node.JS: uso de spawn para importar una base de datos

Ejemplo 1: proceso en segundo plano:

Archivo api.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
'use strict'
  
const fs = require('fs')
  
module.exports = (req, res) => {
  if (!req.params.action) {
    res.end('');return;
  }
    
  switch(req.params.action){
    case 'import':
          
        var u = req.query.u;
        var p = req.query.p;
        var db = req.query.db;
        var file = req.query.file;
         
        console.log(u,p,db,file)
         
        const { spawn } = require('child_process');
          
        const iinn = fs.openSync(file, 'r+');
         
        const subprocess = spawn('/usr/bin/mysql', [
            '-u' + u,
            '-p' + p,
            db
        ], {
          detached: true,
          stdio: [ iinn ]
        });
         
        subprocess.unref();
        res.end()  
    break
  }
}

Enlace de ejemplo: http://tutorialspots.com/api/import?u=admin_tutorialspots&p=tutorialspots&db=admin_tutorialspots&file=/root/tutorialspots.sql

Ejemplo 2: evento cuando se realiza la importación

Archivo api.js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
'use strict'
  
const fs = require('fs')
  
module.exports = (req, res) => {
  if (!req.params.action) {
    res.end('');return;
  }
    
  switch(req.params.action){
    case 'importdone':
          
        var u = req.query.u;
        var p = req.query.p;
        var db = req.query.db;
        var file = req.query.file;
         
        console.log(u,p,db,file)
         
        const { spawn } = require('child_process');
          
        const iinn = fs.openSync(file, 'r+');
         
        const subprocess = spawn('/usr/bin/mysql', [
            '-u' + u,
            '-p' + p,
            db
        ], {          
          stdio: [ iinn ]
        });
          
        subprocess.on('close', (code) => {
          console.log(`child process close all stdio with code ${code}`);
          res.end()  
        });
         
    break
  }
}

Enlace de ejemplo: http://tutorialspots.com/api/importdone?u=admin_tutorialspots&p=tutorialspots&db=admin_tutorialspots&file=/root/tutorialspots.sql

Publicar un comentario

0 Comentarios