首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对接express.js app后,字段列表中出现“未知列国家”

问对接express.js app后,字段列表中出现“未知列国家”
EN

Stack Overflow用户
提问于 2018-06-09 07:31:30
回答 1查看 284关注 0票数 0

我有一个运行了一组Mocha测试的express.js应用程序。在不久前的某个时刻,我完成了这个项目。停靠后,由于mysql错误,我的测试只通过了一半。为了生成这些SQL语句,我使用Bookshelf.js/Knex.js。我不会展示所有的测试,因为它们都有一个共同的问题。

第一个测试运行此代码。

代码语言:javascript
复制
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,
            });
        });
}

在这里,它提供了将新用户添加到mysql数据库的用户模型。用户模型由这个json定义。

代码语言:javascript
复制
"database_test" : {
        "client": "mysql",
        "connection": {
            "host": "DB",
            "database": "TERRA_TEST",
            "user": "root",
            "port": "3306",
            "password": "goon",
            "charset": "utf8"
        }
    },

我在每次测试之前都会运行一系列迁移,数据库的结果模式如下所示。

代码语言:javascript
复制
+----------+------------------+------+-----+---------+----------------+
| 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    |                |
+----------+------------------+------+-----+---------+----------------+

但是,当执行该代码以创建新用户的测试运行时,它将失败并返回此错误。

代码语言:javascript
复制
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\')' }

当我在mysql CLI中运行这段SQL代码时,它的应用没有错误。

另外,这里是docker-compose的DB部分

代码语言:javascript
复制
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

你们中是否有人知道为什么会发生这些错误,以及如何修复它们?它们是在项目停靠后开始发生的。在它运行所有测试都没有错误之前?

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 17:47:31

如果问题是在docker之后开始的,也许您实际上是在运行迁移到本地数据库,并在docker内部针对DB运行应用程序。

无论如何,问题目前没有足够的安装信息来给出明确的答案。如果您在问题中添加了更多信息,请ping,我将更新答案。

我们需要知道你是如何运行你的dockerized设置的。您是如何运行迁移的。您是否有本地mysql安装和docker mysql服务器同时运行。您是否在某个时刻停止了容器(因此会因迁移而丢失数据设置)。基本上完整的代码来再现你的问题将是必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50769582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档