Облачные функции с облачным SQL - Свойство socketPath по типу не существует - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь получить доступ к своей базе данных Google Cloud SQL в моих функциях Firebase.Я следовал документации Google , но это не очень хорошо и оставляет много информации.

Я добавил код из документации в мой файл src\index.ts и заполнил свои данные:

const mysql = require('mysql');

const connectionName =
  process.env.INSTANCE_CONNECTION_NAME || 'test';
const dbUser = process.env.SQL_USER || 'test';
const dbPassword = process.env.SQL_PASSWORD || 'test';
const dbName = process.env.SQL_NAME || 'test';

const mysqlConfig = {
  connectionLimit: 1,
  user: dbUser,
  password: dbPassword,
  database: dbName,
};
if (process.env.NODE_ENV === 'production') {
  mysqlConfig.socketPath = `/cloudsql/${connectionName}`;
}

// Connection pools reuse connections between invocations,
// and handle dropped or expired connections automatically.
let mysqlPool;

exports.mysqlDemo = (req, res) => {
  // Initialize the pool lazily, in case SQL access isn't needed for this
  // GCF instance. Doing so minimizes the number of active SQL connections,
  // which helps keep your GCF instances under SQL connection limits.
  if (!mysqlPool) {
    mysqlPool = mysql.createPool(mysqlConfig);
  }

  mysqlPool.query('SELECT NOW() AS now', (err, results) => {
    if (err) {
      console.error(err);
      res.status(500).send(err);
    } else {
      res.send(JSON.stringify(results));
      console.log("Connected!")
    }
  });

  // Close any SQL resources that were declared inside this function.
  // Keep any declared in global scope (e.g. mysqlPool) for later reuse.
};

Затем я попытался опубликовать это, чтобы посмотреть, будет ли он работать, и получилошибка:

Модуль 'mysql' не указан как зависимость в package.json

Поэтому я установил mysql, выполнив npm install mysql

и я запустил его снова, и на этот раз я получаю сообщение об ошибке:

src / index.ts (23,15): ошибка TS2339: свойство 'socketPath' не существует для типа '{connectionLimit: number;пользователь: строка;пароль: строка;база данных: строка;} '

Что происходит?Я правильно установил это?Я очень потерян, и документы, кажется, не предлагают много решений.Спасибо!

1 Ответ

2 голосов
/ 10 июня 2019

Это похоже на ошибку TypeScript, когда интерфейс для вашего объекта конфигурации выводится, а затем вы пытаетесь добавить дополнительное поле для этого объекта, которое не было объявлено.Другими словами, пример кода от Google - JavaScript, вы используете TypeScript и сталкиваетесь с ошибкой TS.

I думаю, , что вы должны иметь возможность настроить объявление mysqlConfig для включения свойства socketPath (установите null), и все должно быть в порядке.Другими словами, измените определение mysqlConfig на:

const mysqlConfig = {
  connectionLimit: 1,
  user: dbUser,
  password: dbPassword,
  database: dbName,
  socketPath: null
};
...