0

This is my routes.js file

const express = require('express'),
    router = express.Router(),
    loginHandler = require('../handler/loginHandler'),

router.get('^/:userId/:userType/:sessId/:lang/:orgId/:merchantId/:domainId', loginHandler.returnURLForIframe)

module.exports = router;

This is my loginHandler.js

class LoginHandler {
    returnURLForIframe(req, res) {
      let url = process.env.COMM_BACKOFFICE_URL+`/${req.params.userId}/${req.params.userType}/${encodeURIComponent(req.params.sessId)}/${req.params.lang}/${req.params.orgId}/${req.params.merchantId}/${req.params.domainId}`;
      res.send({
         statusCode:0,
         message:"COMM BO URL",
         data:{
              url:url
            }
        });
    }
}


module.exports = new LoginHandler()

and This is my responseHandler.js

const loginHandler  = require('./loginHandler');

class ResponseHandler {

    
    getResponseFromCOMM(options,token, res){
        options.headers= {
            'Accept': 'application/json',
            'Authorization': 'Bearer ' + token,
            'merchantId': 1
        }
    }

}

module.exports = new ResponseHandler();

All I want to do is export req.params.merchantId from loginHandler.js to responseHandler.js ANYHOW..

I have tried to replicate this issue on Glitch : https://glitch.com/~turquoise-spiky-chrysanthemum

  • why not set it with res.set() before res.send()? it seems odd your adding a response layer but then doing the res.send somewhere else, if you keep with this method you would be better off using the next() from the middleware and setting needed params for the response in req – Lawrence Cherone Aug 24 '20 at 16:34
  • How to use `res.set()`? – Nehal Jaisalmeria Aug 24 '20 at 16:39
  • im guessing `options.headers` is setting some response headers.. [res.set()](https://expressjs.com/en/api.html#res.set) does the same. your issue is your doing res.send too early – Lawrence Cherone Aug 24 '20 at 16:41
  • @LawrenceCherone Please elaborate and show a practical implementation. I added `res.set('merchantId', req.params.merchantId)` before `res.send()` – Nehal Jaisalmeria Aug 24 '20 at 17:01

1 Answers1

1

Export reference only like so: module.exports = LoginHandler

LoginHandler.js

class LoginHandler {
    returnURLForIframe(req, res) {
      let url = process.env.COMM_BACKOFFICE_URL+`/${req.params.userId}/${req.params.userType}/${encodeURIComponent(req.params.sessId)}/${req.params.lang}/${req.params.orgId}/${req.params.merchantId}/${req.params.domainId}`;
      res.send({
         statusCode:0,
         message:"COMM BO URL",
         data:{
              url:url
            }
        });
    }
}


module.exports = LoginHandler

same for ResponseHandler.js

const loginHandler  = require('./loginHandler');

class ResponseHandler {

    
    getResponseFromCOMM(options,token, res){
        options.headers= {
            'Accept': 'application/json',
            'Authorization': 'Bearer ' + token,
            'merchantId': 1
        }
    }

}

module.exports = ResponseHandler;

Then import and create instance of loginHandler in routes.js

const express = require('express'),
    router = express.Router(),
    loginHandler = require('../handler/loginHandler'),
const loginHandlerInstance = new loginHandler()
router.get('^/:userId/:userType/:sessId/:lang/:orgId/:merchantId/:domainId', loginHandlerInstance.returnURLForIframe)

module.exports = router;
Radical Edward
  • 2,824
  • 1
  • 10
  • 23