api/app.[tj]s
Modern.js 框架写法下,该文件可以定制 API Server 的启动逻辑。在使用 express
, nest
, koa
时,该文件返回对应框架的实例。
在使用 egg
框架时,该文件返回一个 Boot 类;与 egg
框架自身的约定相同。
以下为简单示例:
Express
import express from 'express'
const app = express();
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
app.use(async (req, res, next) => {
console.info(`access url: ${req.url}`);
next();
});
export default app
Nest
Nest 虽然有定制的启动器,但本质与 Express、Koa 相同,所以应用工程沿用了 Nest 定制启动器的默认入口:api/main.ts
。
按照 Nest 官方生成器生成的项目结构,在应用工程中使用 Nest 框架写法时,目录结构为:
api
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── lambda
│ └── hello.ts
└── main.ts
其中 api/main.ts
中的内容与 Nest 官方生成器生成模版有所不同,应用工程中支持了两种模式:
不包含内置 Module:
import { defineCustom } from '@modern-js/plugin-nest';
import { NestFactory } from '@nestjs/core';
import { Module } from '@nestjs/common';
import { AppModule } from './app.module';
export default NestFactory.create(AppModule);
包含内置 Module:
import { defineCustom } from '@modern-js/plugin-nest';
import { NestFactory } from '@nestjs/core';
import { Module } from '@nestjs/common';
import { AppModule } from './app.module';
export default defineCustom(async modules => {
@Module({
imports: [AppModule, ...modules],
})
class MainModule {}
return NestFactory.create(MainModule);
});
Koa
注意
当没有 app.ts
的时候,Modern.js 默认会添加 koa-body
;当有 app.ts
时,需要你自己添加 koa-body
解析请求体。
import Koa from 'koa'
import koaBody from 'koa-body'
const app = new Koa();
app.use(async (ctx, next) => {
console.info(`access url: ${ctx.url}`);
await next();
});
app.use(koaBody());
export default app;
Egg
使用 Egg 框架时,同样在这个文件中可以自定义启动逻辑; 但与其他框架不同,egg 中此文件遵循 egg 自身的规范,而不是 Modern.js 的约定。