«Неизвестный столбец СТРАНА в списке полей» после dockerizing express.js app - PullRequest
0 голосов
/ 09 июня 2018

У меня есть это приложение express.js с набором тестов Mocha, которые я запускаю.В какой-то момент я недавно докернизировал проект.После dockerizing, это только половина моих тестов, потому что из-за ошибок mysql.Для генерации этих операторов SQL я использую Bookshelf.js / Knex.js.Я не буду показывать все тесты, потому что у них всех есть общая проблема.

Первый тест запускает этот код.

method.registerUser = (request, callBack) => {
    let {
        email,
        username,
        address,
        city,
        zip,
        state,
        password,
        country,
    } = request.body;

    password = hashPassword(decrypt(password));

    if(!testRegistration(request)) {
        return callBack ({
            success: false,
        });
    }

    let insert = {
        NAME: username,
        PASSWORD: password,
        EMAIL: email,
        ADDRESS: address,
        CITY: city,
        ZIP: zip,
        STATE: state,
        COUNTRY: country,
    };

    User.forge(insert)
        .save()
        .then((user) => {
            return callBack ({
                success: true,
            });
        })
        .catch(function (err) {
            logger.log(err);
            return callBack ({
                success: false,
            });
        });
}

Именно здесь он дает модели User добавить нового пользователя в базу данных mysql.Пользовательская модель определяется этим json.

"database_test" : {
        "client": "mysql",
        "connection": {
            "host": "DB",
            "database": "TERRA_TEST",
            "user": "root",
            "port": "3306",
            "password": "goon",
            "charset": "utf8"
        }
    },

У меня есть серия миграций, которые выполняются перед каждым тестом, и схема результатов базы данных выглядит следующим образом.

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| NAME     | varchar(255)     | YES  |     | NULL    |                |
| PASSWORD | varchar(255)     | YES  |     | NULL    |                |
| EMAIL    | varchar(255)     | YES  |     | NULL    |                |
| ADDRESS  | varchar(255)     | YES  |     | NULL    |                |
| CITY     | varchar(255)     | YES  |     | NULL    |                |
| ZIP      | varchar(30)      | YES  |     | NULL    |                |
| STATE    | varchar(255)     | YES  |     | NULL    |                |
| COUNTRY  | varchar(255)     | YES  |     | NULL    |                |
+----------+------------------+------+-----+---------+----------------+

Однакокогда выполняется тест, который выполняет этот код для создания нового пользователя, он не работает и возвращает эту ошибку.

code: 'ER_BAD_FIELD_ERROR',
  errno: 1054,
  sqlMessage: 'Unknown column \'COUNTRY\' in \'field list\'',
  sqlState: '42S22',
  index: 0,
  sql: 'insert into `USERS` (`ADDRESS`, `CITY`, `COUNTRY`, `EMAIL`, `NAME`, `PASSWORD`, `STATE`, `ZIP`) values (\'4909 Jean Manors\', \'New Parkerville\', \'Kiribati\', \'Matilde.Wiegand@hotmail.com\', \'Sarina_Anderson\', \'$2a$10$nsaL/4DyHquIlHKQOxjPiObBZJykbNlSZYCJCe0m3fREN4XD0c9o2\', \'Alaska\', \'01524\')' }

Когда я запускаю этот код SQL, хотя в CLI mysql он применяется без ошибок.

также, здесь находится раздел базы данных docker-compose

DB:
     image: mysql:5.7
     container_name: mysql
     restart: always
     environment:
         - MYSQL_ROOT_PASSWORD=goon
         - MYSQL_DATABASE=TERRA_TEST
         - MYSQL_USER=tester
         - MYSQL_PASSWORD=goon
         - DATABASE_HOST=docker-mysql
     ports:
         - "3306:3306"
     networks:
         - web_sql_bridge

Кто-нибудь из вас может знать, почему возникают эти ошибки и как их исправить?Они начали происходить после докеризации проекта.До этого все тесты запускались без ошибок?

1 Ответ

0 голосов
/ 14 июня 2018

Если проблемы начались после докеризации, возможно, вы на самом деле выполняете миграцию в локальную базу данных и запускаете приложение для БД внутри докера.

В любом случае в настоящее время у вопроса недостаточно информации о настройке, чтобы дать однозначный ответ.Пожалуйста, пинг, если вы добавите больше информации к вопросу, и я обновлю ответ.

Нам нужно знать, как у вас работает докерская установка.Как вы работаете с миграциями.У вас есть локальная установка mysql и одновременно работает docker mysql server.Останавливаете ли вы контейнер в какой-то момент (таким образом, теряя настройки данных при миграции).По сути, необходим полный код для воспроизведения вашей проблемы.

...