0

我正在使用 Loopback3 并尝试为项目文件夹之外的共享模型记录消息。我的项目文件夹结构如下所示

myproj\server\logger.js   // using winston logger here
myProj\common\models\     // I've couple of models here and able to use above logger

此外,我在myproj文件夹(../../shared/models)之外还有几个模型。下面是我的server\model-config.json

"sources": [
  "loopback/common/models",
  "loopback/server/models",
  "../common/models",
  "../../shared/models",  // Shared models
  "./models"
],

Person位于共享模型文件夹中。我如何将记录器对象传递给它。

module.exports = function(Person){

Person.greet = async function(msg) {
    logger.info("received message: " + msg);  // How to get here above winston logger object ?
    console.log("received message: " + msg);
    return 'Greetings... ' + msg;
}

Person.remoteMethod('greet', {
      accepts: {arg: 'msg', type: 'string'},
      returns: {arg: 'greeting', type: 'string'}
});

};

4

2 回答 2

1

当您将环回模型分布在多个目录甚至存储库中时,它可能会有些混乱。从附加到环回实例对象的静态全局引用中控制记录器、验证、实用程序等公共部分始终是一个好习惯。此环回实例对象作为对其所有模型的引用存在。我解决这个问题的方法是......

  1. 在您的 loopback3 项目中添加一个新的引导脚本,并将logger类的实例附加到 loopback 的app实例。
'use strict';

const { logger } = require("./logger");

module.exports = function (app) {
  app.logger = logger;
};
  1. 现在,无论何时需要,您都可以从app模型上的参考资料中轻松访问它。
Person.greet = async function(msg) {
 Person.app.logger.info("received message: " + msg);
 return 'Greetings... ' + msg;
}
于 2020-10-14T15:13:55.993 回答
0

我确实喜欢下面

在服务器\server.js

const {logger} = require("./logger");

app.start = function() {
return app.listen(function() {
    app.emit('started');
    :
    :
    app.models.Person.logger = logger;   // Adding new property to Person model
  });
};

个人模型_

Person.greet = async function(msg) {
 Person.logger.info("received message: " + msg); // using logger object like this
 this.logger.info("received message: " + msg);   // or like this      
 console.log("received message: " + msg);
 return 'Greetings... ' + msg;
}
于 2020-10-12T18:35:28.270 回答