配置
所有 Finch 配置都存储在一个 FinchConfigs 实例中,该实例只创建一次并传递给 FinchApp。本页记录了每个选项及其对应的环境变量。
项目结构
典型的 Finch 项目结构如下:
.
├── lib/
│ ├── app.dart # FinchApp 设置和 main()
│ ├── configs/
│ │ └── setting.dart # 应用级常量(可选)
│ ├── controllers/
│ ├── models/
│ ├── db/
│ ├── route/
│ │ ├── web_route.dart
│ │ └── socket_route.dart
│ ├── languages/ # JSON 语言文件 (en.json, fa.json …)
│ └── widgets/ # Jinja 模板文件 (*.j2.html)
├── public/ # 直接提供服务的静态文件
├── migrations/ # MySQL 迁移 SQL 文件
├── migrations_sqlite/ # SQLite 迁移 SQL 文件
├── .env
└── pubspec.yaml
FinchConfigs
FinchConfigs 是核心配置类。所有构造函数参数都有对应的 .env 回退值。
import 'package:finch/finch_app.dart';
import 'package:finch/finch_tools.dart'; // pathTo(), env
FinchConfigs configs = FinchConfigs(
// --- 服务器 ---
port: env.getInt('DOMAIN_PORT', 8080),
ip: '0.0.0.0',
domain: env.get('DOMAIN', 'localhost'),
domainScheme: env.get('DOMAIN_SCHEME', 'http'),
// --- 路径 ---
publicDir: pathTo(env.get('PUBLIC_DIR', './public')),
widgetsPath: pathTo(env.get('WIDGETS_PATH', './lib/widgets')),
widgetsType: env.get('WIDGETS_TYPE', 'j2.html'),
languagePath: pathTo(env.get('LANGUAGE_PATH', './lib/languages')),
pathCache: pathTo(env.get('PATH_CACHE', './cache_routes')),
pathMigrationMySQL: './migrations',
pathMigrationSQLite: './migrations_sqlite',
// --- 语言 ---
languageSource: LanguageSource.json, // 或 LanguageSource.dart
// dartLanguages: languageDart, // languageSource == dart 时使用
// --- 数据库 ---
dbConfig: FinchDBConfig(
enable: true,
host: env.get('MONGODB_CONNECTION', 'localhost'),
port: env.get('MONGODB_PORT', '27017'),
user: env.get('MONGODB_USER', 'root'),
pass: env.get('MONGODB_PASSWORD', 'password'),
dbName: env.get('MONGODB_NAME', 'my_app'),
auth: env.get('MONGODB_AUTH', 'admin'),
),
mysqlConfig: FinchMysqlConfig(
enable: true,
host: env.get('MYSQL_HOST', 'localhost'),
port: env.getInt('MYSQL_PORT', 3306),
user: env.get('MYSQL_USER', 'db_user'),
pass: env.get('MYSQL_PASS', 'db_password'),
databaseName: env.get('MYSQL_DATABASE', 'my_db'),
),
sqliteConfig: FinchSqliteConfig(
enable: true,
filePath: env.get('SQLITE_PATH', './app.sqlite'),
),
// --- 邮件 ---
mailDefault: '[email protected]',
mailHost: 'smtp.example.com',
// --- 模板引擎 (Jinja) ---
blockStart: '{%',
blockEnd: '%}',
variableStart: '{{',
variableEnd: '}}',
commentStart: '{#',
commentEnd: '#}',
// jinjaMapTemplate: mapTemplates, // 提供一个 Map<String,String> 来打包模板
// --- 安全 ---
cookiePassword: env.get('COOKIE_PASSWORD', 'change-me-in-production'),
// --- 开发 ---
enableLocalDebugger: env.getBool('ENABLE_LOCAL_DEBUGGER', false),
);
关键属性参考
| 属性 | 类型 | 默认值 | 用途 |
|---|---|---|---|
port |
int |
8080 |
HTTP 服务器端口 |
ip |
String |
'0.0.0.0' |
绑定地址 |
domain |
String |
'localhost' |
公共域名 |
domainScheme |
String |
'http' |
http 或 https |
domainPort |
int |
同 port |
生成 URL 中使用的端口 |
publicDir |
String |
'public' |
静态文件根目录 |
widgetsPath |
String |
'bin/widgets' |
模板目录 |
widgetsType |
String |
'html' |
模板文件扩展名 |
languagePath |
String |
'languages' |
JSON 语言文件目录 |
languageSource |
LanguageSource |
.json |
.json 或 .dart |
languages |
List<String> |
默认语言映射的键 | 有效语言代码的白名单;请求的语言若不在此列表中,则回退到默认语言。参见本地化 |
pathCache |
String |
'./cache' |
路由响应缓存目录 |
pathMigrationMySQL |
String |
'./migrations' |
MySQL 迁移目录 |
pathMigrationSQLite |
String |
'./migrations_sqlite' |
SQLite 迁移目录 |
cookiePassword |
String |
'password' |
加密 Cookie 的密钥 |
enableLocalDebugger |
bool |
false |
在浏览器中启用调试栏 |
fakeDelay |
int |
0 |
添加人工响应延迟(毫秒) |
poweredBy |
String |
'Dart Finch' |
X-Powered-By 头部值 |
noStop |
bool |
true |
未处理错误后保持服务器运行 |
数据库配置类
FinchDBConfig(MongoDB)
FinchDBConfig(
enable: true,
host: 'localhost',
port: '27017', // String
user: 'root',
pass: 'password',
dbName: 'my_app',
auth: 'admin', // 认证源数据库
maxConnections: 10, // mongo_dart 连接池的大小(Db.pool)
)
FinchMysqlConfig
FinchMysqlConfig(
enable: true,
host: 'localhost',
port: 3306, // int
user: 'db_user',
pass: 'db_password',
databaseName: 'my_db',
collation: 'utf8mb4_general_ci',
maxConnections: 10, // MySQLConnectionPool 的大小
)
FinchSqliteConfig
FinchSqliteConfig(
enable: true,
filePath: './app.sqlite',
)
环境变量(.env)
Finch 会自动读取项目根目录中的 .env 文件。所有 FinchConfigs 值都可以通过环境变量覆盖。env 映射(来自 finch_tools.dart)同时提供 .env 和系统环境变量的访问。
DOMAIN_PORT=8080
DOMAIN=example.com
DOMAIN_SCHEME=https
MONGODB_CONNECTION=localhost
MONGODB_PORT=27017
MONGODB_USER=root
MONGODB_PASSWORD=secret
MONGODB_NAME=my_app
MONGODB_AUTH=admin
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=db_user
MYSQL_PASS=db_pass
MYSQL_DATABASE=my_db
SQLITE_PATH=./app.sqlite
ENABLE_LOCAL_DEBUGGER=true
isLocalDebug
FinchApp.config.isLocalDebug 在环境变量 LOCAL_DEBUG 设置为 true 时,或当 Dart 以调试模式运行(Console.isDebug)时返回 true。使用此标志来启用详细输出或本地调试栏。
if (FinchApp.config.isLocalDebug) {
Console.p('调试模式已激活');
}