Добавление нескольких файлов учетных данных BigQuery JSON в проект Node

#javascript #node.js #google-bigquery #credentials

#javascript #node.js #google-bigquery #учетные данные

Вопрос:

Я работал над проектом 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' amp;amp; 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:

Если нет, то как я могу отдельно указать, какой файл 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`,
                    keyFilename: this.createCredentials(auth)
                });
                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)
            }
        })
    })
  

Комментарии:

1. Я все еще не понимаю, куда я должен передать соответствующий файл credentials.json.

2. Я выделил жирным шрифтом в своем коде, вы используете его при создании BigQuery объекта keyFilename: this.createCredentials(auth)