Node.js 节点REST API:需要在一个对象中组合多个路由

Node.js 节点REST API:需要在一个对象中组合多个路由,node.js,typescript,express,Node.js,Typescript,Express,我正在用TypeScript和NodeJS构建一个应用程序后端 我将多个路由逻辑保存在单独的文件中(每个服务的单个文件夹中),如下所示: 我需要在将来的所有服务中这样做 我需要组合这些路由,以便在index.ts文件中将它们指定为单个实体 比如: 从“/routes/”导入; app.use('/api/users',require('./routes/users/); . . 等等 因此,我不必在index.ts文件中明确地提到每个路由。要做到这一点,您需要动态地发现文件名(readdir或

我正在用TypeScript和NodeJS构建一个应用程序后端

我将多个路由逻辑保存在单独的文件中(每个服务的单个文件夹中),如下所示:

我需要在将来的所有服务中这样做

我需要组合这些路由,以便在index.ts文件中将它们指定为单个实体

比如:

从“/routes/”导入;
app.use('/api/users',require('./routes/users/);
.
.
等等

因此,我不必在index.ts文件中明确地提到每个路由。

要做到这一点,您需要动态地发现文件名(
readdir
或类似文件),并使用来导入它们。动态导入(
import()
)返回模块名称空间对象的承诺

例如,使用以下内容(即兴,可能需要一些调整):


请注意,这假设您有一个TypeScript加载程序设置(例如,与
ts节点
一样)。如果没有,则需要在运行之前将这些TypeScript文件编译为JavaScript,然后在
rexIsRouterFile

中将
.ts
更改为
.js
要执行此操作,需要动态发现文件名(
readdir
或类似文件),并使用来导入它们。动态导入(
import()
)返回模块名称空间对象的承诺

例如,使用以下内容(即兴,可能需要一些调整):


请注意,这假设您有一个TypeScript加载程序设置(例如,与
ts节点
一样)。如果不这样做,则需要在运行之前将这些TypeScript文件编译为JavaScript,然后在
rexIsRouterFile
中将
.ts
更改为
.js
,有一种更简单的方法使用
路由器。使用()
方法可以组合各个端点

// /routes/users/index.ts

import * as express from 'express';
import { signupRouter } from './signupRouter';
import { signinRouter } from './signinRouter';
import { signoutRouter } from './signoutRouter';

const router = express.Router();

router.use(signupRouter);
router.use(signinRouter);
router.use(signoutRouter);

export {router as usersRouter};
假设您的文件结构如下所示-

/src
  /routes
    /users
      - signup.ts
      - signin.ts
      - signout.ts
 index.ts (your main app entry point)

您可以使用
express.router()
提供的
router.use()
方法

首先,将一个新的
index.ts
文件添加到
/routes/users
文件夹中,以合并多个端点

// /routes/users/index.ts

import * as express from 'express';
import { signupRouter } from './signupRouter';
import { signinRouter } from './signinRouter';
import { signoutRouter } from './signoutRouter';

const router = express.Router();

router.use(signupRouter);
router.use(signinRouter);
router.use(signoutRouter);

export {router as usersRouter};
然后在主应用程序入口点
index.ts
,执行以下操作-

// /src/index.ts

import * as express from 'express';

import { usersRouter } from './routes/users/index.ts';

const PORT = process.env.PORT || 4000;
const app = express();

...

// Add your single entity entry point like this
app.use('/api/user', usersRouter);

...

app.listen(PORT, () => console.log(`Listening on port ${PORT}`)

使用
路由器有一种更简单的方法。使用()
方法可以组合各个端点

// /routes/users/index.ts

import * as express from 'express';
import { signupRouter } from './signupRouter';
import { signinRouter } from './signinRouter';
import { signoutRouter } from './signoutRouter';

const router = express.Router();

router.use(signupRouter);
router.use(signinRouter);
router.use(signoutRouter);

export {router as usersRouter};
假设您的文件结构如下所示-

/src
  /routes
    /users
      - signup.ts
      - signin.ts
      - signout.ts
 index.ts (your main app entry point)

您可以使用
express.router()
提供的
router.use()
方法

首先,将一个新的
index.ts
文件添加到
/routes/users
文件夹中,以合并多个端点

// /routes/users/index.ts

import * as express from 'express';
import { signupRouter } from './signupRouter';
import { signinRouter } from './signinRouter';
import { signoutRouter } from './signoutRouter';

const router = express.Router();

router.use(signupRouter);
router.use(signinRouter);
router.use(signoutRouter);

export {router as usersRouter};
然后在主应用程序入口点
index.ts
,执行以下操作-

// /src/index.ts

import * as express from 'express';

import { usersRouter } from './routes/users/index.ts';

const PORT = process.env.PORT || 4000;
const app = express();

...

// Add your single entity entry point like this
app.use('/api/user', usersRouter);

...

app.listen(PORT, () => console.log(`Listening on port ${PORT}`)

你可以试试这个文档嗨,湿婆,我知道这一点。这不是我想要的,因为我为每个端点保存了不同的文件。您可以尝试使用此文档Hi Siva,我知道这一点。这不是我想要的,因为我为每个端点保存了不同的文件。