#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)