When I call res.sendFile
inside of app.post
, nothing happens. Status code of the request is 200. Any ideas?
Here’s the code for my app.
import express from "express";
import Boggle from "solve-boggle";
import { rateLimit } from "express-rate-limit";
import { dirname } from "path";
import { fileURLToPath } from "url";
import { readFileSync, writeFile } from "fs";
const __dirname = dirname(fileURLToPath(import.meta.url));
const app = express();
const PORT = process.env.PORT || 5001;
let user_name;
let board;
app.use(express.urlencoded({extended:true}));
app.use(express.static(__dirname));
app.use(express.json());
app.get("/", (req, res) => {
res.sendFile(__dirname + "/public/index.html");
});
app.get("/new-board", (req, res) => {
console.log("new board req: ", req.body);
board = new Boggle(5);
res.send(board);
});
app.get("/solution", (req, res) => {
board.solve(words => {
res.send(words);
});
});
app.get("/name", (req, res) => {
res.sendFile(__dirname + "/public/play.html");
})
// using get instead of post to prevent form resubmission
app.post("/name", (req, res) => {
user_name = req.body.name;
console.log("body: ", req.body);
console.log("name: ", req.body.name);
res.sendFile(__dirname + "/public/play.html");
});
// publish score
app.post("/publish-score", (req, res) => {
console.log("request name: ", user_name);
console.log("request score: ", req.body.score);
let user_score = req.body.score;
// read scores file
let data = readFileSync("./data/scores.json", (error, data) => {
if(error){
console.log(error);
return;
};
});
// check if name already in score list
let names = [];
let scores_data = JSON.parse(data);
scores_data.daily_puzzle.scores.map((entry) => names.push(entry.name));
console.log("names: ", names);
if (names.includes(user_name)) {
console.log("Name used already!");
res.sendFile(__dirname + "/public/dup_name.html");
return;
};
// add name and score to list
let push_name = user_name;
let push_score = user_score;
if (user_name == undefined){push_name = "NoName"};
if (user_score == undefined){push_score = "NoScore"};
scores_data.daily_puzzle.scores.push({
"name": push_name,
"score": push_score
});
// console.log(scores_data.daily_puzzle.scores);
writeFile("./data/scores.json", JSON.stringify(scores_data), (error) => {
if (error) {
console.log("An error has occurred ", error);
return;
}
console.log("Data written successfully to the file");
});
// });
});
app.listen(PORT, () => {console.log(`Listening on port ${PORT}`)});
I’d like to have the server send dup_name.html
when the use tries to publish a score with a name that’s already in scores.json
. I’ve tried moving it to different location in a[[.pot
but no luck.