Функция Firebase onCreate не будет писать в firestore, но https.onRequest будет - тот же код - PullRequest
0 голосов
/ 12 мая 2019

У меня есть функция, которая использует обещания.

Я выполнил код через https.onRequest (), и он записывает в базу данных, однако, когда я использую тот же код в документе (). OnCreate (), он просто внезапно останавливается, и я получаюсообщение в журналах функций «Игнорирование исключения из завершенной функции» без других записей журнала.

Код перестает выполняться после комментария "// код состояния сервера".В консоли я вижу ответ избирателя JSON с сервера, за которым следует код состояния.Я пытался использовать collection (). Doc (). Set () и .add ().Ранее в журналах я получал сообщение об ошибке «Функция вернула неопределенное, ожидаемое обещание или значение», которого я не получаю в https.onRequest ().Код идентичен за исключением кода .onCreate (), извлекающего дополнительную информацию из базы данных при запуске.

Любая помощь будет принята с благодарностью.

const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.testonupdate = functions.firestore.document("users/{userId}/voterRegistration/infoToSubmit").onCreate((snap, context) => {
console.info('New voter info has been added to check verification')
const voterValues = snap.data();
console.info('database values: ' + voterValues);
const voterInfo = {
    'firstName': voterValues.firstName,
    'lastName': voterValues.lastName,
    'dob': voterValues.dob,
    'street': voterValues.street,
    'city': voterValues.city,
    'zip': voterValues.zip
}
const userID = voterValues.userId
console.info('voter info values: ' + voterInfo + userID) 

var request = require('request');
var jar = request.jar();
var voteUrl = 'https://'
var utahApi = 'https://'
var xsrfOptions = {
    url: voteUrl,
    method: 'get',
    jar: jar
};
// initial promise
var options = new Promise((resolve, reject) => {
    request.get(xsrfOptions, () => {
        var fullCookie = jar.getCookies(voteUrl);
        resolve(fullCookie);

    })
})

options.then((value) => {
    //parse cookie returned from var options and dump into headers
    var cookieToString = value.toString()
    var xsrfCookie = cookieToString.slice(0, 47)
    var slicedCookie = cookieToString.slice(11, 47)
    console.info('slicedCookie :' + slicedCookie)
    //POST request data
    return {
        uri: utahApi,
        headers: {
            'Host': 'votesearch.utah.gov',
            'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0',
            'Accept': 'application/json, text/plain, */*',
            'Accept-Language': 'en-US,en;q=0.5',
            'Accept-Encoding': 'gzip, deflate, br',
            'Referer': voteUrl,
            'Content-Type': 'application/json;charset=utf-8',
            'X-XSRF-TOKEN': slicedCookie,
            //'Content-Length': '300', LEAVE THIS COMMENTED OUT OR SERVER WILL NOT RESPOND
            'Connection': 'keep-alive',
            'Cookie': xsrfCookie,
            'Pragma': 'no-cache',
            'Cache-Control': 'no-cache'
        },
        method: 'POST',
        json: true,
        //user info goes here
        body: {
            'firstName': voterValues.firstName,
            'lastName': voterValues.lastName,
            'dob': voterValues.dob,
            'street': voterValues.street,
            'city': voterValues.city,
            'zip': voterValues.zip
        }
    }
}).then((options) => {
    console.info('starting request...')
    // voter registration request
    request(options, (error, response, body) => {
        if (!error && response.statusCode === 200) {
            console.info(response.body.voter); // voter response
            console.info(response.statusCode); // server status code
            admin
                .firestore()
                .collection("users")
                .doc("userID")
                .set(response.body);


        } else {
            console.info('failed response code ' + response.statusCode);
            console.info('failed at retreiving voterInfo ' + error);

        }
    });
    // return console.info('did we finish?')
    //catch any error messages
}).catch((err) => {
    console.info('errored at end of function: ' + err);
})


})

1 Ответ

0 голосов
/ 14 мая 2019

Создание нового обещания для request(options, (error, response, body) => {....., похоже, решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...