We all know that HTTP server is stateless, every time a request is processed, new instance of server handler will be created to serve the request. Each request is served by different handler instance, they don’t share context.
This is kind of true in C#.net, JAVA and other compile language unless static class and/or variable are used. You can create session to share the user context, that’s a different thing.
I have a telegram bot called @fengfaqbot, which is used to auto reply/handle messages matched by rules. It sometimes will send auto response to another group which doesn’t have the rule setup. After tons of effort of investigation, I found that the problem is just caused by a missing let.
This lead to the payload variable become a global variable. And in some other place, this variable is modified, so something funny can just happened.
To prove that the global variable is shared between requests. I defined a global variable and increased it’s number every time a new request is received by expressjs.
You have to be very careful when a new variable is introduced, don’t forget to declaration word. You may use let, var or const. This article will not discuss the difference between them.
Can you use a global variable as a singleton?