我已经在另一个问题中回答了这个问题,但我想我应该更深入地了解 Nest 引擎盖下发生的事情。
Nest 中的路由处理程序在技术上是 express 中的中间件。IE
@Controller('test')
export class TestController {
@Get()
testGet() {
return 'do the thing';
}
}
Run Code Online (Sandbox Code Playgroud)
Get 在引擎盖下(通过一些非常棒的代码)转变为
app.get('test', (req, res, next) => {
res.send('do the thing');
})
Run Code Online (Sandbox Code Playgroud)
现在当我们添加一个过滤器
@Controller('test')
export class TestController {
@Get()
@UseFilter(SomeExceptionFilter)
testGet() {
return 'do the thing';
}
}
Run Code Online (Sandbox Code Playgroud)
更多的魔法发生了,我们明白了
app.get('test', (req, res, next) => {
let returnVal = '';
try {
returnVal = controller.testGet();
} catch (err) {
returnVal = someExceptionFilterInstnace.catch(err, customArgumentHostThatNestMaintains);
}
res.send(returnVal);
})
Run Code Online (Sandbox Code Playgroud)
(免责声明:这不是实际发生的完美的 1:1 表示,因为有很多事情发生,但这应该让人明白它最终都是中间件)
当您添加服务时也是如此,它们只是 express/fastify 中间件内部的方法调用,因此它们不会在 newrelic 中以一种很好的方式被破坏。
不幸的是,我不知道在 newrelic 中有什么好方法可以帮助解决这个问题,也不知道如何添加更好的注释。查看中间件的时间,您有 218 毫秒,这还不错。很可能是某个地方的数据库操作,所以我会检查你的管道、守卫和拦截器,以及你的服务,看看你是否有任何可能的大查询。如果不出意外,您可以在本地进行一些分析并获得有关所用时间的更多原始信息
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |