2017-02-22 9 views
0

Я пытаюсь прочитать данные из базы данных mysql и записать их в файл JSON. Я довольно новичок в node.js, и любая помощь будет принята с благодарностью.Данные Mysql должны быть записаны в файл json

Код я написал:

var mysql  = require('mysql'); 
var fs = require('fs'); 
var configFile = process.cwd() + "\\config.json"; 
var configFileContents = fs.readFileSync(configFile, 'utf8'); 
var config = JSON.parse(configFileContents); 
//config = config[process.env.BLENV]; 
console.log(config.PROD.HTTP); 

var connection = mysql.createConnection({ 
    host  : config.QA.SQLHostName, 
    user  : config.QA.SQLUserName, 
    password : config.QA.SQLPassword, 
    database : config.QA.SQLDatabase, 
    multipleStatements: true 
}); 

connection.connect(); 

var timeInMs = Date.now(); 
console.log(timeInMs); 

connection.query(` 
select 
c.name as "Name", 
cl.u_geographic_region as "Region", 
CASE 
    WHEN cic.os like '%Windows%' THEN 'Windows' 
    WHEN cic.os like '%aix%' THEN 'AIX' 
    WHEN cic.os like '%esx%' THEN 'ESX' 
    WHEN cic.os like '%linux%' THEN 'Linux' 
    WHEN cic.os like '%solaris%' THEN 'Solaris' 
     ELSE 'UNKNOWN' 
    END as "Operating System", 

ci.dns_domain as "Host domain", 
ci.ip_address as "IP Address", 
CASE 
    WHEN c.sys_class_name = 'cmdb_ci_computer' THEN 'Computer' 
    WHEN c.sys_class_name = 'cmdb_ci_win_server' THEN 'Windows Server' 
    WHEN c.sys_class_name = 'cmdb_ci_esx_server' THEN 'ESX Server' 
    WHEN c.sys_class_name = 'cmdb_ci_aix_server' THEN 'AIX Server' 
    WHEN c.sys_class_name = 'cmdb_ci_lb' THEN 'Load Balancer' 
    WHEN c.sys_class_name = 'cmdb_ci_lb_ace' THEN 'lb_ace' 
    WHEN c.sys_class_name = 'cmdb_ci_aix_lb_bigip' THEN 'lb_bigip' 
    WHEN c.sys_class_name = 'cmdb_ci_linux_server' THEN 'Linux Server' 
    WHEN c.sys_class_name = 'cmdb_ci_mainframe' THEN 'IBM Mainframe' 
    WHEN c.sys_class_name = 'cmdb_ci_solaris_server' THEN 'Solaris Server' 
    WHEN c.sys_class_name = 'cmdb_u_ci_ibmi_server' THEN 'IBMi Server' 
    WHEN c.sys_class_name = 'cmdb_ u_ci_ibmi_server' THEN 'IBMi Server' 
    WHEN c.sys_class_name = 'cmdb_u_server_appliance' THEN 'ServerAppliance' 
     ELSE 'Unknown' 
    END as "Class", 

CASE 
    WHEN c.install_status = '1' THEN 'Installed' 
    WHEN c.install_status = '100' THEN 'Absent' 
    WHEN c.install_status = '2' THEN 'On Order' 
    WHEN c.install_status = '3' THEN 'In Maintenance' 
    WHEN c.install_status = '4' THEN 'Pending Install' 
    WHEN c.install_status = '5' THEN 'Pending Repair' 
    WHEN c.install_status = '6' THEN 'In Stock' 
    WHEN c.install_status = '7' THEN 'Retired' 
    WHEN c.install_status = '8' THEN 'Stolen' 
    WHEN c.install_status = '9' THEN 'In Use' 
         ELSE 'Unknown' 
      END As "lifecycle Status" 

from 
cmdb as c 
join cmdb_ci ci on c.sys_id = ci.sys_id 
join cmdb_ci_hardware as cih on c.sys_id = cih.sys_id 
join cmdb_ci_computer cic on c.sys_id = cic.sys_id 
join cmn_location as cl on cl.sys_id = c.location 
where c.name is not null 
`, function(err, rows, fields) { 
    if (err) throw err; 

for (var i in rows) { 
    console.log('the rows are', rows[i]); 
} 
}); 

connection.end(); 

Теперь, когда я бегу код с помощью «узла filename.js» я в состоянии напечатать вывод на моей консоли. Но я хочу, чтобы это было записано в json-файл, чтобы я мог обрабатывать данные и применять некоторую логику.

+0

Вместо использования 'console.log' вы можете использовать модуль' fs' для записи его в файл. В чем проблема? –

+0

Как работает вывод mysql json? : -o –

+0

, когда я запускаю команду узла в этом файле. В консоли я получаю данные в формате json. Мне нужны данные json в файл с json-форматом. Как я могу это сделать? –

ответ

0

Если все, что вам нужно сделать, это записать вывод данных MySQL в JSON в файл, заменить ...

for (var i in rows) { 
console.log('the rows are', rows[i]); 
} 

... с:

fs.writeFile("/path/to/file.json", JSON.stringify(rows), function(err) { 
    if (err) return console.log(err);  
    console.log("The file was saved!"); 
}); 

Подробнее о JSON.stringify() at https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

+0

Это полностью сработало Nehal. Большое спасибо приятелю. Моя ошибка заключалась в том, что я не строчил строки. –

+0

Привет, Nehal, я пытаюсь запускать многострочные операторы mysql в моем коде nodejs следующим образом: var q = "select c.name как 'Name'," + "cl.u_geographic_region как 'Region'," + "CASE "+ \t" WHEN cic.os like '% Windows%' THEN 'Windows' "+ " WHEN cic.os like '% aix%' THEN 'AIX' "+ " WHEN cic.os like '% esx% 'THEN 'ESX' "+ "КОГДА cic.os как '% LINUX%', затем 'Linux'" + "КОГДА cic.os как '% соляриса%', затем 'Солярис'" + \t \t \t" ELSE' UNKNOWN '"+ \t \t" END as "Операционная система", "+ в моем windo ws с помощью обратных тиков я смог добиться этого, но в linux мне не удалось –

+0

@RaghuReddy Пожалуйста, откройте новый вопрос, если он у вас есть. Все мои ответы до сих пор на ваши вопросы были протестированы в Linux. –

Смежные вопросы