---
sidebar_position: 3
title: 运行时框架
---

# 运行时框架

Modern.js 的 BFF 支持不同的运行时框架，当前 Modern.js 的 BFF 支持两种运行时框架 [Express.js](https://expressjs.com/) 和 [Koa.js](https://koajs.com/)。

使用不同运行时框架时，有部分 API 会存在差异。

## 获取请求上下文

在 BFF 函数中，有时需要获取请求上下文，来处理更多逻辑。此时，根据不同的运行时框架，你需要从通过不同的 API 来获取：

import { Tabs, Tab as TabItem } from "@theme";

<Tabs>
  <TabItem value="express" label="Express.js" default>

```ts title="api/lambda/hello.ts"
import { useContext } from '@modern-js/runtime/express'
export const get = async () => {
  const { req } = useContext();
  console.info(`access url: ${req.url}`);
  return 'Hello Modern.js'
};
```

  </TabItem>
  <TabItem value="koa" label="Koa.js">

```ts title="api/lambda/hello.ts"
import { useContext } from '@modern-js/runtime/koa'
export const get = async () => {
  const ctx = useContext();
  console.info(`access url: ${req.url}`);
  return 'Hello Modern.js'
};
```

  </TabItem>
</Tabs>

:::info
详细内容可以参考 [useContext](/apis/app/runtime/bff/use-context)。
:::

## 使用中间件

在 BFF 函数中，有时需要使用中间件，来处理更多逻辑。此时，根据不同的运行时框架，你需要从通过不同的 API 来获取：

<Tabs>
  <TabItem value="express" label="Express.js" default>

```ts title="api/_app.ts"
import { hook } from '@modern-js/runtime/express';

export default hook(({ addMiddleware }) => {
  addMiddleware((req, res, next) => {
    req.query.id = 'koa';
    next();
  });
});
```

  </TabItem>
  <TabItem value="koa" label="Koa.js">

```ts title="api/_app.ts"
import { hook } from '@modern-js/runtime/koa';

export default hook(({ addMiddleware }) => {
  addMiddleware(async (ctx, next) => {
    ctx.req.query.id = 'koa';
    await next();
  });
});
```

  </TabItem>
</Tabs>

:::info
详细内容可以参考 [hook](/apis/app/runtime/bff/hook)。
:::
