Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Typescript class does not recognize constants in .env file, but recognizes them in a React component

I am using .env file and reading from it.
I use it like this: process.env.BASE_URL in both the class and the react component.
Why would it work in the component and in the class it is undefined?

This is the class and here the value of process.env.BASE_URL is undefined:

export default class HttpClient {
  async prepareFileForSigning(file: string) {
    var request = {
      data: file,
    };

    const res = await axios
      .post<GetAttachmentsResponse, AxiosResponse<any>>(process.env.BASE_URL + "/something", request)
      .catch(function (err) {
        console.log(err.response.data.info);
        NotificationManager.error(
          err.response.data.info ?? t("notifications.serverError"),
          t("notifications.error"),
          3000
        );
      });
    return (res as any).data;
  }
}

This is the React component and here the value of process.env.CLIENT_ID and the rest is good:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

export const ChooseSign: React.FC<AppProps> = (props) => {

        var request = {
          client_id: process.env.CLIENT_ID,
          client_secret: process.env.CLIENT_SECRET,
          scope: process.env.SCOPE,
          grant_type: process.env.GRANT_TYPE,
          requested_token_use: process.env.REQUESTED_TOKEN_USE,
          assertion: res,
        };

        //rest of the code
};

export default ChooseSign;

This is my .env file:

# prod
# CLIENT_ID=############
# CLIENT_SECRET=############
# CONSENT_URL=############
# dev
CLIENT_ID=############
CLIENT_SECRET=############
CONSENT_URL=############
#
SCOPE=user.read contacts.read mail.read email offline_access openid profile
GRANT_TYPE=urn:ietf:params:oauth:grant-type:jwt-bearer
REQUESTED_TOKEN_USE=on_behalf_of
#
BASE_URL=############
BASE_URL_GRAPH=############
BASE_URL_MICROSOFT_ONLINE=############
#
NODE_ENV=development
PORT=3007

What could I do?

>Solution :

You can either define a default value for the environment variable in the URL:

const res = await axios
      .post<GetAttachmentsResponse, AxiosResponse<any>>((process.env.BASE_URL || "default URL") + "/something", request)

Or define environment variable types in an environment.d.ts file, check this answer for more.

The values in ChooseSign are good because you are defining a new object, so the string values can be of type string | undefined.
On the other hand, the axios call requires a string.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading