# #node.js #firebase #google-cloud-functions
Вопрос:
Я пытаюсь реализовать функцию Firebase, которая генерирует пользовательский токен для моего приложения. Но я продолжаю получать следующее сообщение об ошибке :
Ошибка: не удалось обработать запрос
Или это закончится таймаутом.
У вас есть какие-либо идеи о том, что может быть не так с моим кодом в дальнейшем ? Я пытаюсь сделать это с помощью «тестового» идентификатора.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const serviceAccount = require('./serviceAccountKey.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
exports.customFunction = functions.https.onRequest((data, context) => {
return admin.auth().createCustomToken('test')
.then(customToken => {
console.log(`The customToken is: ${customToken}`);
return {
status: 'success',
customToken: customToken
};
})
.catch(error => {
console.error(`Something happened buddy: ${error}`)
return {
status: 'error'
};
});
});
Ответ №1:
Ваша облачная функция является функцией HTTPS. Для того, чтобы прекратить его , вам нужно позвонить res.redirect()
res.send()
, или res.end()
, как описано в документе.
В своем коде вы фактически возвращаете цепочку обещаний: это правильный способ завершить облачную функцию, вызванную фоновыми событиями (что не относится к облачной функции HTTPS, которая запускается вызовом URL-адреса, который она предоставляет).
Итак, следующие изменения должны сделать свое дело (непроверенные):
exports.customFunction = functions.https.onRequest((req, res)(data, context) => {
admin.auth().createCustomToken('test') // No need to return
.then(customToken => {
console.log(`The customToken is: ${customToken}`);
response.status(200).send({
status: 'success',
customToken: customToken
});
})
.catch(error => {
console.error(`Something happened buddy: ${error}`)
response.status(500).send(error);
});
});
Обратите внимание, что при использовании облачной функции HTTPS объекты, которые вы передаете обработчику, являются не базой data
данных и context
объектами, а Express.js request
и response
предметы.
Так понятнее писать
exports.customFunction = functions.https.onRequest((req, res) => {...});
вместо
exports.customFunction = functions.https.onRequest((data, context) => {...});
Комментарии:
1. Я думаю, что ОП использовал
onRequest
вместоonCall
этого здесь. остальная часть синтаксиса и использование(data, context) => {}
подразумевают это.2. @samthecodingman вы, скорее всего, правы! Пусть Пьер подтвердит это.