Ir al contenido principal

Node process.env always returns strings

In Node, process.env property gives you access to the user environmental variables. Opposite to what you could think, these variables are always treated as strings, no matter the nature of your environment or the way you defined them.

Misunderstanding of that said above can give you unpredictible behaviours, as that shown in the next code snippet regarding the usage of a presumably boolean env variable:

process.env.FALSY = false;
let evaluation = process.env.FALSY 
? "This is imposible" 
: "This is the expected result";
// Since process.env.FALSY is returned as string,
// and the bool value of a non empty string is true
// it is evaluated not as falsy but as truthy

The problem is not just related to boolean values, but also to numeric values, as shown the next code snippet:

process.env.ONE = 1;
let mustBeSix = process.env.ONE + 5; 
// Though you could expect mustBeSix being 6
// its result is the string concatenation
//  of '1' and '5' ie, '15'

let forSureIsTrue = mustBeSix < 10;
// Though you could expect the previous expression
// being truthy, the fact is that '15' is converted to
// number for comparison, so it's evaluated as falsy

Comentarios

Entradas populares de este blog

Linting C# in Visual Studio Code

Though very usual in programming environments as Javascript/Typescript, linting , or analyzing code for enforcing a set of coding style rules, is not usually present in the .NET based environments. Rule enforcing is really useful when working on team shared codebases in order to keep them coherent, what in last term reduces both development times and coding errors. A linting example Maybe a practical example would be helpful for explaining what  linting  is to the newcomers (feel free to go on if you aren't). Let's imagine you are a new member in a C# development team that has well established set of coding style rules. Instead (or apart) of putting them in a document, they've adopted a tool that checks these rules during the code building process. Your first code is such ambitious as this: namespace HelloWorld {      using System;      public class Program      {           public static void Main(string[] args)           {                Console

ESlint: Ignore unused underscore variables

Some naming conventions promote the use of the underscore character (" _ ") for those variables that must be declared but are not being used. One common case is that in which a function signature contains some variables that will not be used, as for instance the Express error handlers: app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); In the above example only the arguments err and res are being used, though all four must be defined in the handler signature. Thus, following the naming convention of using underscores for those unused variables, we could recode it as: app.use(function(err, _, res, __) { console.error(err.stack); res.status(500).send('Something broke!'); }); Though it makes the function more readable, it comes with a problem if using ESlint: it will blame by declaring unused variables. error '_' is defined but never used error '__' is define

Using Bitbucket app passwords with git on MacOS (OSX)

Learn how Bitbucket passwords are stored by git on MacOS.