javascript - 将 Express 应用程序迁移到 NestJS
问题描述
我有一个现有的快速应用程序,它足够大。我想将它迁移到 NestJS 应用程序,但要逐步进行。所以我用现有的 Express 实例创建了 Nest 应用程序,但遇到了一个问题 - 所有嵌套处理程序总是在 Express 处理程序之后添加。但是我有一个根 Express 中间件,我只想将其应用于某些处理它的处理程序。如何在 Express 处理程序之前应用 Nest 处理程序?
例如。我创建了一个新的 NestJS 项目,并更改了 main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as express from 'express';
const expressApp = express();
const authMiddleware = (req, res) => res.end('Auth middleware');
expressApp.use(authMiddleware);
expressApp.get('/test', ((req, res) => res.end('Test')))
async function bootstrap() {
const app = await NestFactory.create(AppModule, new ExpressAdapter(expressApp));
await app.listen(3000);
}
bootstrap();
在根路径上,我希望看到Hello World!但我看到Auth 中间件
我知道我可以做类似的事情
expressApp.get('/test', authMiddleware, ((req, res) => res.end('Test')))
但是目前的项目太大了,有子路由器,而不仅仅是一个中间件。也许还有另一种方法可以做到这一点?
解决方案
您的 auth 中间件总是结束请求,而不是像中间件通常那样行事。通常中间件有这样的签名......
const authMiddleware = (req, res, next) => {
// do auth things like verify a JWT and attach it to req.user
next()
}
expressApp.use(authMiddleware)
const loggingMiddleware = (req, res, next) => {
const { headers, body, user, route } = req
console.log({ headers, body, user, route })
next()
}
expressApp.use(loggingMiddleware)
在上面的代码中,authMiddleware 总是在 loggingMiddleware 之前执行,因为它是先附加的。例如,如果我们颠倒顺序并首先附加 loggingMiddleware,req.user 将始终未定义。Express 文档对中间件控制流的运行方式进行了非常详细的描述,并且 NestJS 在底层遵循了相同的模式。
推荐阅读
- c# - Xamarin Forms Custom progress bar blurred
- python - 尝试使用 Spark SQL 查询时发现重复列
- ios - libc+abi.dylib: terminating with uncaught exception of type NSException
- asp.net - Search multiple parameters in one search box
- python - 如何使用 Matplotlib (Python) 在 SymPy 中制作动画
- javascript - 调用函数而不重新分配命名参数
- c# - R2 Score and RMS Loss in ML.NET - Is there something wrong with the way I trained the model or is it on the data that I have?
- java - "Thread-19" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-19
- json - JSON parse failure on valid JSON
- wpf - 动画列表框中新添加的项目