如何启动后端服务
启动服务
nocobase通过yarn dev会同时启动前端服务和后端服务。
在根目录package.json的scripts找不到我们启动服务端的命令,只看到了关键字nocobase
"scripts": {
    "nocobase": "nocobase",
    "pm": "nocobase pm",
    "dev": "nocobase dev",
    "start": "nocobase start",
    ...
  },
通过node_modules/.bin目录下可以找到nocobase的启动文件,它是/nocobase/packages/core/cli/bin/index.js映射而来的
在/nocobase/packages/core/cli/src/commands存储着各种命令的文件

通过dev.js调用runAppCommand,在runAppCommand通过设置APP_PACKAGE_ROOT='app'和
exports.isDev() = true执行exports.run('ts-node', argv)便启动了服务端代码
// 文件地址:/packages/core/cli/src/commands/dev.js
await runAppCommand('install', ['--silent']);
// 文件地址:/packages/core/cli/src/util.js
exports.runAppCommand = async (command, args = []) => {
  const { APP_PACKAGE_ROOT } = process.env;
  if (exports.isDev()) {
    const argv = [
      '-P',
      './tsconfig.server.json',
      '-r',
      'tsconfig-paths/register',
      `./packages/${APP_PACKAGE_ROOT}/server/src/index.ts`,
      command,
      ...args,
    ];
    await exports.run('ts-node', argv);
  }
};
进入到/packages/app/server/src/index.ts执行了两段代码
const app = new Application(config);
app.runAsCLI();
其中的config取自 /packages/app/server/src/config/database.ts
import { IDatabaseOptions } from '@nocobase/database';
export default {
  logging: process.env.DB_LOGGING == 'on' ? customLogger : false,
  dialect: process.env.DB_DIALECT as any,
  storage: process.env.DB_STORAGE,
  username: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_DATABASE,
  host: process.env.DB_HOST,
  port: process.env.DB_PORT as any,
  timezone: process.env.DB_TIMEZONE,
  tablePrefix: process.env.DB_TABLE_PREFIX,
  schema: process.env.DB_SCHEMA,
  underscored: process.env.DB_UNDERSCORED === 'true',
} as IDatabaseOptions;
因此,在 env 的环境变量中决定了使用哪种类型的数据库。
在new Application的constructor中,创建数据库
this._db = this.createDatabase(options);
private createDatabase(options: ApplicationOptions) {
  const db = new Database();
  return db;
}
在 DataBase 的类中,执行了以下功能
1、 初始化 Sequelize
/packages/core/database/src/database.ts
class Database {
    constructor() {
        this.sequelize = new Sequelize(this.sequelizeOptions(this.options));
  }
}
在runAsCLI连接数据库
await this.db.auth({ retry: 30 }); // retry 重新连接次数
在这里的this.db = this._db,_id在constructor时候执行了init函数后,进行了数据库创建
this._db = this.createDatabase(options);
在auth方法中测试数据库是否的连接成功
// 文件地址:/packages/core/database/src/database.ts
async auth(options) {
  const authenticate = async () => {
     await this.sequelize.authenticate(others);
  };
  return await authenticate();
}
其中sequelize的值
import { Sequelize } from 'sequelize';
this.sequelize = new Sequelize(this.sequelizeOptions(this.options));
如何用可视化工具查看数据库
1、下载navicate
2、打开sqlite连接

3、设置datebase的file地址 /nocobase/storage/db/nocobase.sqlite

4、完成
