2016-11-25 5 views
1

В настоящее время я разрабатываю приложение для своего учреждения и столкнулся с следующей проблемой. Я хочу разрешить пользователю проверять некоторые вещи в базе данных (в настоящее время используется firebase). Поскольку я должен проверить некоторые вещи с внешнего сервера, я настроил сервер node.js для отправки уведомлений об изменениях. Я хочу использовать этот сервер в качестве ссылки между Firebase и App для удовлетворения более сложных требований.Как сделать работу Async API?

Для ворота между моим сервером узла и приложением, я использовал экспресс ... Я установил основные вещи, но следующая проблема произошла, и я не знаю, как решить эту проблему ...

Например , У меня есть API, открытый для входа в учетную запись пользователя, поэтому я отправляю свой сервер с именем пользователя и маркером аутентификации. Но теперь проблема возникает. Поскольку сервер должен проверять его с Firebase, я не могу ничего сделать со значением, поскольку не знаю, когда получаю его, а также не знаю, как это сделать с помощью async.

Это действительно помогло бы мне, если кто-то знает, как это сделать. Если этот верхний сценарий состоит в том, чтобы ввести в заблуждение простую вещь:

Как я могу получить запрос (выразить), отправить значение из Firebase ... и просто отправить запрос, когда значение уже загружено?

Я готов изменить базу данных, если необходимо, например, MongoDB или что-то в этом случае.

+0

Вы должны проверить ответ по приведенной выше ссылке. Основная идея заключается в том, что экспресс-сервер ожидает ответа от firebase. Когда вы получили ответ от firebase, экспресс-сервер отправляет данные обратно клиенту. – iKoala

+0

Спасибо за ответ уже проверил ссылку, и я загляну в нее :) – Mathew

ответ

1

общие решения проблем, как это что-то вроде этого:

app.post('/login', function (req, res) { 
    makeAsyncCall('some arguments...', function (err, data) { 
    if (err) { 
     // you have error, send an appropriate error 
     // to the client with `res.send` 
    } else { 
     // you have `data`, check it and use `res.send` 
     // to send response to the client 
    } 
    }); 
}); 

Так внутри вашего обработчика, вы запустите функцию асинхронной, которая принимает функцию обратного вызова, и в этой функции обратного вызова вы создаете ответ на ваш оригинальный HTTP запрос.

makeAsyncCall может быть другим HTTP-запросом на какой-либо другой сервер или запрос на базу данных или что-то еще. Это может быть даже тайм-аут:

app.get('/delay', function (req, res) { 
    setTimeout(function() { 
    req.send('Done'); 
    }); 
}, 3000); 

Во внутренних обратных вызовов вы по-прежнему имеют доступ к параметрам внешних функций, в которых они определены - как req и res объектов конкретно.

+0

Спасибо за быстрый ответ :) Я проверю, работает ли он – Mathew

+0

Сейчас работает спасибо :) – Mathew

+0

Эй :) Просто интересно, есть ли подобный трюк для функции возврата ... Я скопировал ту же версию, что и api в функции, но здесь я получаю неопределенную ошибку ... – Mathew