如何启动后端服务
启动服务
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、完成