Добавление нескольких файлов учетных данных BigQuery JSON в проект Node - PullRequest
4 голосов
/ 01 апреля 2019

Я работал над проектом Node, который включает в себя выборку некоторых данных из BigQuery.Пока все было хорошо;У меня есть файл credential.json (из BigQuery), и проект работает, как и ожидалось.

Однако я хочу реализовать новую функцию в проекте, и это потребовало бы получения другого набора данных из BigQuery.У меня есть совершенно другой файл credential.json для этого нового набора данных.Кажется, мой проект распознает только исходный файл credential.json, который у меня был (хотя я назвал их по-разному).

Вот фрагмент того, как я связал свой первый файл credential.json:

function createCredentials(){

    try{
        const encodedCredentials = process.env.GOOGLE_AUTH_KEY;

        if (typeof encodedCredentials === 'string' && encodedCredentials.length > 0) {
            const google_auth = atob(encodedCredentials);

        if (!fs.existsSync('credentials.json')) {
            fs.writeFile("credentials.json", google_auth, function (err, google_auth) {
                  if (err) console.log(err);
                  console.log("Successfully Written to File.");
                });
          }
      }

    } 

catch (error){
    logger.warn(`Ensure that the environment variable for GOOGLE_AUTH_KEY is set correctly: full errors is given here: ${error.message}`)
    process.kill(process.pid, 'SIGTERM')
  }


}

Есть ли способ объединить мои два файла credential.json вместе?Если нет, то как я могу отдельно объявить, какой файл credential.json использовать?

1 Ответ

2 голосов
/ 01 апреля 2019

Если нет, то как я могу отдельно объявить, какой файл credential.json использовать?

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

В приведенном ниже коде предполагается, что вы изменили это

function createCredentials(){

    try{
        const encodedCredentials = process.env.GOOGLE_AUTH_KEY;

На это:

function createCredentials(auth){

    try{
        const encodedCredentials = auth;

И вы можете использовать это так


    import BigQuery from '@google-cloud/bigquery';
    import {GoogApi} from "../apiManager" //Private code to get Token from client DB

    if (!global._babelPolyfill) {
        var a = require("babel-polyfill")
    }

    describe('Check routing', async () => {

        it('Test stack  ', async (done, auth) => {

            //Fetch client Auth from local Database

            //Replace the 2 value below with real values
            const tableName = "myTest";
            const dataset = "myDataset";

            try {

                const bigquery = new BigQuery({
                    projectId: `myProject`,
                    <b>keyFilename: this.createCredentials(auth)</b>
                });
                await bigquery.createDataset(dataset)
                    .then(
                        args => {
                            console.log(`Create dataset, result is: ${args}`)
                        })
                    .catch(err => {
                        console.log(`Error in the process: ${err.message}`)
                    })
            } catch (err) {
                console.log("err", err)
            }
        })
    })
...