Nodejsのクラスにある変数をエクスポートする方法

Aug 24 2020

これは私のファイルloginHandler.jsです

class LoginHandler {
 merchantId = '';
    returnURLForIframe(req, res) {
      merchantId = req.params.merchantId;
    }  
}

module.exports = new LoginHandler();

merchantId別のファイルの変数にアクセスしたい

const loginHandler  = require('./loginHandler')
class ResponseHandler {
    
    getResponseFromCOMM(options,token, res){
        console.log(loginHandler.merchantId)
    }
}

ただし、me​​rchantIdは未定義です。私が間違っていることを教えていただけますか?

ここでは、Glitch =のコードを見ることができます。 https://glitch.com/edit/#!/turquoise-spiky-chrysanthemum

回答

1 Karlan Aug 24 2020 at 10:46

私のloginhanderler.js

class LoginHandler {
  merchantId = '';
  returnURLForIframe(req, res) {
    this.merchantId = req.params.merchantId;
  }
}

module.exports = new LoginHandler();

私のindex.js

let loginHandler = require('./loginhandler');

let req = {
  params: {
    merchantId: 'a test',
  },
};

loginHandler.returnURLForIframe(req);

console.log(loginHandler.merchantId);
1 NehalJaisalmeria Aug 25 2020 at 11:50

loginHandler.jsの環境変数に追加して解決しました

process.env.MERCHANT_ID = req.params.merchantId

次に、responseHandler.jsで、その変数にアクセスしました

merchantId : process.env.MERCHANT_ID

SarathPS Aug 24 2020 at 11:18

オブジェクトキーとして定義できます

class LoginHandler {
  constructor() {
    this.merchantId = '';     
  }

    returnURLForIframe(req, res) {
      this.merchantId = req.params.merchantId;
    }  
}
malarres Aug 24 2020 at 11:32

新しいLoginHandler

class LoginHandler {
    merchantId = "";
  returnURLForIframe(req, res) {
    this.merchantId = req.params.merchantId;
  }
}

module.exports = new LoginHandler();

将来の参考のために(私自身のためにも)

エラーが何であるかを検出するのは混乱していたので、私にとっては変数の名前を変更すると役に立ちました。

class LoginHandler {
    other= "";
  returnURLForIframe(req, res) {
    other = req.params.merchantId;
  }
}

module.exports = new LoginHandler();

それから私はエラーがあったことを見て、それをReferenceError: other is not defined解決することができました。

また、ロギングに加えてreturnURLForIframe、エラーを確認するために呼び出す必要がありました

const loginHandler = require("./loginHandler");
class ResponseHandler {
  getResponseFromCOMM(options, token, res) {
    loginHandler.returnURLForIframe({ params: { merchantId: "lalala" } });
    console.log(loginHandler);
  }
}
let rh = new ResponseHandler();
rh.getResponseFromCOMM("foo", "bar", "baz");