配置

所有 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['DOMAIN_PORT'] ?? '8080').toInt(def: 8080),
  ip: '0.0.0.0',
  domain: env['DOMAIN'] ?? 'localhost',
  domainScheme: env['DOMAIN_SCHEME'] ?? 'http',

  // --- 路径 ---
  publicDir: pathTo(env['PUBLIC_DIR'] ?? './public'),
  widgetsPath: pathTo(env['WIDGETS_PATH'] ?? './lib/widgets'),
  widgetsType: env['WIDGETS_TYPE'] ?? 'j2.html',
  languagePath: pathTo(env['LANGUAGE_PATH'] ?? './lib/languages'),
  pathCache: pathTo(env['PATH_CACHE'] ?? './cache_routes'),
  pathMigrationMySQL: './migrations',
  pathMigrationSQLite: './migrations_sqlite',

  // --- 语言 ---
  languageSource: LanguageSource.json, // 或 LanguageSource.dart
  // dartLanguages: languageDart,

  // --- 数据库 ---
  dbConfig: FinchDBConfig(
    enable: true,
    host: env['MONGODB_CONNECTION'] ?? 'localhost',
    port: env['MONGODB_PORT'] ?? '27017',
    user: env['MONGODB_USER'] ?? 'root',
    pass: env['MONGODB_PASSWORD'] ?? 'password',
    dbName: env['MONGODB_NAME'] ?? 'my_app',
    auth: env['MONGODB_AUTH'] ?? 'admin',
  ),
  mysqlConfig: FinchMysqlConfig(
    enable: true,
    host: env['MYSQL_HOST'] ?? 'localhost',
    port: (env['MYSQL_PORT'] ?? '3306').toInt(def: 3306),
    user: env['MYSQL_USER'] ?? 'db_user',
    pass: env['MYSQL_PASS'] ?? 'db_password',
    databaseName: env['MYSQL_DATABASE'] ?? 'my_db',
  ),
  sqliteConfig: FinchSqliteConfig(
    enable: true,
    filePath: env['SQLITE_PATH'] ?? './app.sqlite',
  ),

  // --- 邮件 ---
  mailDefault: '[email protected]',
  mailHost: 'smtp.example.com',

  // --- 模板引擎 (Jinja) ---
  blockStart: '{%',
  blockEnd: '%}',
  variableStart: '{{',
  variableEnd: '}}',
  commentStart: '{#',
  commentEnd: '#}',

  // --- 安全 ---
  cookiePassword: env['COOKIE_PASSWORD'] ?? 'change-me-in-production',

  // --- 开发 ---
  enableLocalDebugger: (env['ENABLE_LOCAL_DEBUGGER'] ?? false).toString().toBool,
);

关键属性参考

属性 类型 默认值 用途
port int 8080 HTTP 服务器端口
ip String '0.0.0.0' 绑定地址
domain String 'localhost' 公共域名
domainScheme String 'http' httphttps
domainPort int port 生成 URL 中使用的端口
publicDir String 'public' 静态文件根目录
widgetsPath String 'bin/widgets' 模板目录
widgetsType String 'html' 模板文件扩展名
languagePath String 'languages' JSON 语言文件目录
languageSource LanguageSource .json .json.dart
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',       // 认证源数据库
)

FinchMysqlConfig

FinchMysqlConfig(
  enable: true,
  host: 'localhost',
  port: 3306,          // int
  user: 'db_user',
  pass: 'db_password',
  databaseName: 'my_db',
  collation: 'utf8mb4_general_ci',
)

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('调试模式已激活');
}