在函数中返回 pom 客户端的实例并从另一个文件访问它会丢失上下文
returning instance of a pom client in a function and accessing it from another file lose context
我有一个打字稿class如下:
const client = require('prom-client');
export default class Monitoring {
// public client: any;
private _logger: LoggingService;
public constructor(logger: LoggingService) {
// this._pomClient = client;
this._logger = logger;
}
public async executePromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
const histogram = new client.Histogram({
name: 'http_request_duration_seconds1',
help: 'Duration of HTTP requests in seconds histogram',
labelNames: ['method', 'handler', 'code'],
buckets: [0.1, 5, 15, 50, 100, 500],
});
return histogram;
}
public async getPromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
return client;
}
他的执行函数工作正常,但当我在我的服务器 ts 中调用 getPromClient() 时没有问题,如下所示:
const monitoring = new Monitoring(
loggingService,
);
// const client = require('prom-client');
const client: any = monitoring.getPromClient();
// enable prom-client to expose default application metrics
const collectDefaultMetrics = client.collectDefaultMetrics;
我明白了
TypeError: collectDefaultMetrics is not a function
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
我很困惑,我只是返回客户端并尝试在 sercer.ts 中使用
为什么它不起作用?
错过等待?
const client: any = await monitoring.getPromClient();
您将 getPromClient()
声明为 async
。这意味着如果你不 await
它会 return 一个 Promise
。由于您在 getPromClient()
中没有 await
任何内容,只需删除 async
即可解决问题。
public getPromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
return client;
}
您可能不知道 async
是什么意思,只是到处声明它,而您不应该这样做。您可以了解更多 here
我有一个打字稿class如下:
const client = require('prom-client');
export default class Monitoring {
// public client: any;
private _logger: LoggingService;
public constructor(logger: LoggingService) {
// this._pomClient = client;
this._logger = logger;
}
public async executePromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
const histogram = new client.Histogram({
name: 'http_request_duration_seconds1',
help: 'Duration of HTTP requests in seconds histogram',
labelNames: ['method', 'handler', 'code'],
buckets: [0.1, 5, 15, 50, 100, 500],
});
return histogram;
}
public async getPromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
return client;
}
他的执行函数工作正常,但当我在我的服务器 ts 中调用 getPromClient() 时没有问题,如下所示:
const monitoring = new Monitoring(
loggingService,
);
// const client = require('prom-client');
const client: any = monitoring.getPromClient();
// enable prom-client to expose default application metrics
const collectDefaultMetrics = client.collectDefaultMetrics;
我明白了
TypeError: collectDefaultMetrics is not a function
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
我很困惑,我只是返回客户端并尝试在 sercer.ts 中使用 为什么它不起作用?
错过等待?
const client: any = await monitoring.getPromClient();
您将 getPromClient()
声明为 async
。这意味着如果你不 await
它会 return 一个 Promise
。由于您在 getPromClient()
中没有 await
任何内容,只需删除 async
即可解决问题。
public getPromClient() {
this._logger.debug({message: `Returning prom client isnatnce`})
return client;
}
您可能不知道 async
是什么意思,只是到处声明它,而您不应该这样做。您可以了解更多 here