# Log: 遇到的问题
在实践Nest的过程中遇到的问题
# 连接数据库,typeorm配置
在配置数据库的时候,报错
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
^^^^^^
SyntaxError: Cannot use import statement outside a module
按照官方文档是在ormconfig.json里配置数据库
{
"type": "mysql",
"host": "localhost",
"port": 3306,
"username": "root",
"password": "root",
"database": "test",
"entities": ["src/**/*.entity{.ts,.js}"],
"synchronize": true
}
配置的没有问题,但为什么报错呢?
在网上找了一下,发现是entities路径设置的问题。
参考stackoverflow TypeORM Entity in NESTJS - Cannot use import statement outside a module
修改entities实例的路径,之前配置默认是取的src目录下的ts文件。不能识别的原因是在js执行上下文引入的ts文件,如果没有用webpack可以使用下面的解决办法
entities: [join(__dirname, '**', '*.entity.{ts,js}')]
join
是从 path
模块引入的。现在 __dirname
可以获取到不管是从src或者dist里面的ts或js文件了。
# 数据库存在已创建的表格
创建了一个简单的user表,但第二次运行的时候就报错了,user表已存在
[TypeOrmModule] Unable to connect to the database. Retrying (3)... +3100ms
QueryFailedError: Table 'user' already exists
下面是我的typeorm的配置信息
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '12345678',
database: 'nestProject',
entities: [join(__dirname, '**', '*.entity.{ts,js}')],
synchronize: true,
}),
找到一个解决办法,就是去掉 synchronize: true
这一项,默认是false,再次运行就可以了。
但这个是要去掉synchronize这个属性,如果不去掉这个属性怎么解决呢?
寻求大牛的帮助,又有一个解决办法。
我设置的数据库的名称是大小写驼峰命名法,才导致的无法识别,数据库名称改为下划线命名,character 设置为 utf8,collation设置为utf8_general_ci,再次运行就没有问题了。
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '12345678',
database: 'nest_project_data',
entities: [join(__dirname, '**', '*.entity.{ts,js}')],
synchronize: true,
}),
注:数据库命名要下划线命名,数据表也需要用下划线命名。