Я Java разработчик и не очень опытный в мире NodeJS / JavaScript. Я написал файл TypeScript для пользовательского регистратора и пытаюсь использовать его в других микросервисах (написанный на Express / Node) в качестве NPM модуля импорта.
Я могу записать вывод на консоль, как logger.log («фиктивное сообщение»); но я не могу передать это как функцию moddileware в app.use (logger ()). Ошибка ниже: -
**
% npm start
> aws-sample-app@1.0.0 start /Users/aws-sample-app
> node index.js
/Users/mydevelopment/aws-sample-app/node_modules/express/lib/application.js:210
throw new TypeError('app.use() requires a middleware function')
^
TypeError: app.use() requires a middleware function
at Function.use (/Users/mydevelopment/aws-sample-app/node_modules/express/lib/application.js:210:11)
at Object.<anonymous> (/Users/mydevelopment/aws-sample-app/index.js:21:5)
at Module._compile (internal/modules/cjs/loader.js:1123:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1143:10)
at Module.load (internal/modules/cjs/loader.js:972:32)
at Function.Module._load (internal/modules/cjs/loader.js:872:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
at internal/main/run_main_module.js:17:47
npm ERR! code ELIFECYCLE
**
Я импортирую и вызываю вот так в другом микросервисе: -
const logger = require('@test/aws-logging-framework/src/custom-logger').logger('hello-app', myobject);
const app = express();
app.use(logger());
app.set('PORT', (process.env.PORT || 3002));
app.use(bodyPraser.urlencoded({extended: false}));
app.use(bodyPraser.json());
app.get('/', function(request, response){
logger.info('hello message');
response.send('custom logging (JSON)');
}
Это мой пользовательский модуль логгера: -
'use-strict';
let keys: Array<string> = ['hostname'];
const CN: string = 'my-logger';
const LEVEL: string = 'trace';
const MASKED: string = 'CONTENT MASKED';
const updatedKeys = (options) =>{
if(options !== undefined && options !== null){
if (options.hasOwnProperty("blacklisted")) {
options['blacklisted'].forEach(element => {
keys.push(element);
});
}
if (options.hasOwnProperty("whitelisted")) {
keys = keys.filter(function(x) {
return options['whitelisted'].indexOf(x) < 0;
});
}
}
return keys;
}
const logger = (name: string, options) => require("pino")({
name: (name !== null && name !== undefined) ? `${CN}-${name}` : CN,
level: LEVEL,
redact: {
paths:updatedKeys(options),
censor(...args) {
console.log(`[censor method] ${JSON.stringify(args)}`);
return MASKED;
}
},
mixin() {
return { mixinCalled: 1 };
}
});
module.exports.logger = (name: string, options) => {
(...obj) => {
console.log('object::::::', ...obj);
console.log('obj::', obj.length);
return new logger(name, options)(obj);
}
}
Ниже приведены 2 проблемы с кодом: -
Я не могу использовать 'новый 'ключевое слово в модуле логгера (возвращать новый логгер (имя, опции) (obj);) как получающее эту ошибку "Только ключевое слово" функция "может быть вызвано с ключевым словом" новый "."
Невозможно использовать его в качестве функции промежуточного программного обеспечения в других службах (app.use (logger ());)
Я много пытался отладить его, но не нашел никакого конкретного решения. Пожалуйста, помогите сообщить мне об этом, а также объясните мне причину root, чтобы я мог ее хорошо понять и позаботиться в следующий раз.