user13801785
user13801785

Reputation:

I need to access a variable outside of the function it is currently in. (JavaScript & NodeJS)

I am aware that JavaScript won't let me use var result outside of the function app.get. No matter how much I wrap my head around it, I can't seem to find a solution.

I need to access var result in the function app.post but its currently in the function app.get and has to stay inside of app.get because it is full of random numbers and having it inside of app.get lets me generate new random numbers every time I refresh the page... Here is the code:

app.get("/", function(request, response) {
 var random = Math.round(Math.random() * 1);

 var firstNumber = random ? (Math.random() * (10000) - 5000).toFixed(2) : (Math.round(Math.random() * (100)) - 50);
 var secondNumber = random ? (Math.random() * (10000) - 5000).toFixed(2) : (Math.round(Math.random() * (100)) - 50);
 var operations = random ? ["+", "-"] : ["*", "/"];

 var randomOperation = operations[Math.round(Math.random() * 1)];
 var expression = firstNumber + randomOperation + secondNumber;
 var resultNotInterger = eval(expression);
 var result = Number(resultNotInterger).toFixed(2);

response.render("index.ejs", {
firstNumber: firstNumber,
secondNumber: secondNumber,
randomOperation: randomOperation,
result: result
   });
});



app.post("/", function(request, response) {
 var clientResponse = Number(request.body.clientResponse).toFixed(2);
 var machineResponse =
 response.redirect("/");
 console.log(result);
 });

Is there any genius out there that could solve this problem?

Thanks.

Upvotes: 0

Views: 41

Answers (1)

Sakibur Rahman
Sakibur Rahman

Reputation: 904

It seems that the random number generation part is independent of the get request. You can always move that to a separate function an call it from both routes like this:

function getRandomNumbers() {
 var random = Math.round(Math.random() * 1);

 var firstNumber = random ? (Math.random() * (10000) - 5000).toFixed(2) : (Math.round(Math.random() * (100)) - 50);
 var secondNumber = random ? (Math.random() * (10000) - 5000).toFixed(2) : (Math.round(Math.random() * (100)) - 50);
 var operations = random ? ["+", "-"] : ["*", "/"];

 var randomOperation = operations[Math.round(Math.random() * 1)];
 var expression = firstNumber + randomOperation + secondNumber;
 var resultNotInterger = eval(expression);
 var result = Number(resultNotInterger).toFixed(2);

 return {
   firstNumber,
   secondNumber,
   randomOperation,
   result,
 }
} 

app.get("/", function(request, response) {
   const {
     firstNumber,
     secondNumber,
     randomOperation,
     result,
   } = getRandomNumbers();

   response.render("index.ejs", {
     firstNumber: firstNumber,
     secondNumber: secondNumber,
     randomOperation: randomOperation,
     result: result
   });
});


app.post("/", function(request, response) {
 const { result } = getRandomNumbers();
 var clientResponse = Number(request.body.clientResponse).toFixed(2);
 var machineResponse =
 response.redirect("/");
 console.log(result);
});

Upvotes: 1

Related Questions