Reputation:
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
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