Попытка написать скрипт для сброса моей MongoDB, чтобы затем снова восстановить ее в тестовой базе данных.
const {spawn} = require('child_process');
const backupDB = spawn('C:\\_Apps\\mongo\\bin\\mongodump.exe', [
'--host', 'localhost',
'--port', '27019',
'--collection', 'ops',
'--db', 'prod',
'--out', "C:\\_Apps"],
{shell: true}
);
backupDB.stdout.on('data', (data) => {
console.info(data.toString());
});
backupDB.stderr.on('data', (data) => {
console.info('Error: ', data);
});
backupDB.stderr.on('close', (code) => {
console.info('Exit Code: ', code);
Как ни странно, скрипт делает то, что должен (я могу найти вывод BSON в указанном месте), но вывод загадочен:
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 30 38 2e 37 33 32 2b 30 32 30 30 09 77 72 69 74 69 6e 67 20 73 6d 61 72 74 4f 52 2e 6f 70 73 20 74 ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 31 31 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 31 34 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 31 37 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 32 30 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 32 33 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 32 36 2e 32 36 34 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 32 39 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 33 32 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 33 35 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 33 38 2e 32 36 35 2b 30 32 30 30 09 5b 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 34 31 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 34 34 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 34 37 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 35 30 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 35 33 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 35 36 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 36 3a 35 39 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 30 32 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 30 35 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 30 38 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 31 31 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 31 34 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 31 37 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 32 30 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 32 33 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 32 36 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 32 39 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 33 32 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e 2e 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 33 35 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e 2e 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 33 38 2e 32 36 35 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 2e ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 34 31 2e 32 36 36 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 34 33 2e 33 34 32 2b 30 32 30 30 09 5b 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ... >
Error: <Buffer 32 30 31 39 2d 30 36 2d 32 37 54 31 34 3a 32 37 3a 34 33 2e 33 34 32 2b 30 32 30 30 09 64 6f 6e 65 20 64 75 6d 70 69 6e 67 20 73 6d 61 72 74 4f 52 2e ... >
Exit Code: false



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Этот вывод представляет собой просто закодированный текст.
Попробуйте это, чтобы увидеть реальный результат:
backupDB.stderr.on('data', (data) => {
console.info('Error: ', data.toString('ascii'));
});
Обратите внимание, что этот вывод исходит от стдерр, а не стандартный вывод.
Материал, который вы разместили, переводится как:
2019-06-27T14:26:08.732+0200 writing smartOR.ops t
2019-06-27T14:26:11.265+0200 [....................
2019-06-27T14:26:14.265+0200 [....................
2019-06-27T14:26:17.265+0200 [....................
2019-06-27T14:26:20.265+0200 [....................
2019-06-27T14:26:23.265+0200 [....................
2019-06-27T14:26:26.264+0200 [....................
2019-06-27T14:26:29.265+0200 [....................
2019-06-27T14:26:32.265+0200 [....................
2019-06-27T14:26:35.265+0200 [....................
2019-06-27T14:26:38.265+0200 [....................
2019-06-27T14:26:41.265+0200 [###.................
2019-06-27T14:26:44.266+0200 [###.................
2019-06-27T14:26:47.265+0200 [###.................
2019-06-27T14:26:50.265+0200 [###.................
2019-06-27T14:26:53.265+0200 [###.................
2019-06-27T14:26:56.265+0200 [###.................
2019-06-27T14:26:59.265+0200 [###.................
2019-06-27T14:27:02.265+0200 [###.................
2019-06-27T14:27:05.266+0200 [###.................
2019-06-27T14:27:08.265+0200 [###.................
2019-06-27T14:27:11.265+0200 [###.................
2019-06-27T14:27:14.266+0200 [#####...............
2019-06-27T14:27:17.266+0200 [#####...............
2019-06-27T14:27:20.266+0200 [#######.............
2019-06-27T14:27:23.266+0200 [########............
2019-06-27T14:27:26.265+0200 [##########..........
2019-06-27T14:27:29.265+0200 [############........
2019-06-27T14:27:32.265+0200 [##############......
2019-06-27T14:27:35.265+0200 [#################...
2019-06-27T14:27:38.265+0200 [###################.
2019-06-27T14:27:41.266+0200 [####################
2019-06-27T14:27:43.342+0200 [####################
2019-06-27T14:27:43.342+0200 done dumping smartOR.
Это вполне нормально, stdout часто используется для вывода фактического «результата» операции (например, mongodump может записывать в stdout, а не в файл), поэтому stderr используется для таких вещей, как прогресс и информация.
Я запускаю два экземпляра mongorestore из child_process, иногда один застревает на 100% и не возвращает событие закрытия. Есть идеи? Прогресс: 2019-06-27T21:19:46.962+0200 [#########################] test_dev.collection 1,39 МБ/1,39 МБ (100,0% ) Ход выполнения: 2019-06-27T21:19:49.962+0200 [#########################] test_dev.collection 1,39 МБ/1,39 МБ (100,0 %)
Вы можете расшифровать это так:
backupDB.stdout.on('data', (data) => {
console.info(Buffer.from(data).toString());
});
Внутри toString() вы можете указать любой кодирование, который вы хотите
Спасибо. Почему эти данные поступают из stderr?