У меня есть соединение Firebase в nodejs, которое подталкивает данные к URL-адресу, когда соединение остается постоянным, когда оно закрывается, я хочу удалить эти данные (думаю, я нажимаю «эй, я здесь», и когда я уезжаю, текст исчезает)Выполнение операций при закрытии NodeJS
Я сделал «работоспособной», который показывает пример этого: http://web-f6176e84-c073-416f-93af-62a9a9fbfabd.runnable.com
в основном, нажмите «Ctrl + C» и печатает «пытается удалить ссылки» но на самом деле не удаляет данные (документы говорят, что remove() эквивалентен набору (null), который в основном устанавливает данные в значение null, а поскольку он равен нулю, весь элемент должен исчезнуть.)
Однако он не удаляет его, я не вижу, чтобы данные когда-либо «исчезали». (Я использую URL-адрес Temp Firebase, вы должныдолжны иметь возможность дублировать любой URL-адрес, к которому вы можете получить доступ, если этот URL-адрес перестает существовать).
это код, который я использую.
var FB_URL = 'https://cuhiqgro1t3.firebaseio-demo.com/test_code';
var Firebase = require('firebase');
var myRootRef = new Firebase(FB_URL);
console.log("created Firebase URL");
process.stdin.resume(); //so the program will not close instantly
function delete_fb_entries() {
return function() {
console.log("Trying to remove reference");
myRootRef.remove();
process.exit();
}
}
//do something when app is closing
process.on('exit', delete_fb_entries());
//catches ctrl+c event
process.on('SIGINT', delete_fb_entries());
//catches uncaught exceptions
process.on('uncaughtException', delete_fb_entries());
EDIT: Дополнительная информация, как к «почему», я нажимаю мой локальный IP-адрес, чтобы мой URL Firebase, потому что я ленивый, и это проще просто иметь установку веб-страницы, я всегда могу доступ, который будет отображаться URL-адрес определенных устройств (и я знаю, что использование таблиц маршрутизаторов будет проще), на самом деле у меня также есть другие цели для этого использования (если я , должен быть внутри моей сети, я могу просто выбрать конкретное устройство из своего веб-страницы и доступа к данным, в которых я нуждаюсь, в любом случае, это работает, но я просто не могу заставить его корректно удалять, это использовалось для работы в какой-то момент времени, я верю, поэтому я могу только предположить, что API изменился или что-то).
РЕДАКТИРОВАТЬ 2: ОК удалил process.exit(), как было предложено, и runnable, похоже, удалил данные, о которых я спрашивал, я попробовал это на своих локальных данных (и после некоторой очистки и комментирования) он удалил данные , однако, когда я нажимаю Ctrl + C, он больше не выходит из программы ..... так yay.
Мне нужно выяснить, требуется ли «process.exit()» в этот момент или нет необходимости.
Редактировать 3: Хорошо, поэтому мне нужно использовать process.exit (насколько я могу судить, Ctrl + C больше не выходит из программы, мне нужно ctrl + Z и перезагружать). Я попытался добавить его сразу после, но я понял, что удаление элемента firebase не является синхронной операцией, поэтому, когда я закрываю его, я попытался (следующая попытка) использовать обработчик для полного удаления для функции удаления (так что удалите (onComplete) , а затем добавление функции process.exit() в функцию onComplete).
Так, наконец, это выглядит так, и это, кажется, работает с моим приложением
var FB_URL = 'https://cuhiqgro1t3.firebaseio-demo.com/test_code';
var Firebase = require('firebase');
var myRootRef = new Firebase(FB_URL);
console.log("created Firebase URL");
function onComplete() {
process.exit();
]
process.stdin.resume(); //so the program will not close instantly
function delete_fb_entries() {
return function() {
console.log("Trying to remove reference");
myRootRef.remove(onComplete);
}
}
//do something when app is closing
process.on('exit', delete_fb_entries());
//catches ctrl+c event
process.on('SIGINT', delete_fb_entries());
//catches uncaught exceptions
process.on('uncaughtException', delete_fb_entries());
EDIT 4: В ответ на комментарии ниже, поэтому я попытался модифицировать простую программу, чтобы быть следующим:
function delete_fb_entries(){
return function() {
console.log("I should quit soon");
}
}
process.stdin.resume(); //so the program will not close instantly
//catches ctrl+c event
process.on('SIGINT', delete_fb_entries());
Моя программа никогда не выходила. Я не понимаю, почему узел не закрывается в этом случае, изменяя, чтобы добавить process.exit() после того, как console.log заставляет nodejs выйти. Это не асинхронная функция, так почему она не выходит в этом случае? (Является ли это ошибка или непонимание того, как это работает на меня?)
Почему 'process.exit()', процесс уже выходит –
Я думаю, что в какой-то момент я был под впечатлением, что это было необходимо (возможно, это был неточный пример, или я просто неправильно понял документацию, это было несколько месяцев с тех пор, как я написал эту пьесу). Я могу попытаться удалить его. – onaclov2000
ОК, поэтому я удалил process.exit() из функции и, похоже, работает в моем примере, но не в моем локальном программном обеспечении, теперь, чтобы понять, что происходит с этим. (Я могу обновить дополнительный код, так как код, который я показываю, больше не дублирует проблему, о которой я изначально приходил, чтобы спросить о) – onaclov2000