当我在
res.sendFile
内部调用 app.post("/publish-score"...)
时,什么也没有发生。请求的状态代码是 200。有什么想法吗?
这是我的应用程序的代码。
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}`)});
当用户尝试发布名称已在
dup_name.html
中的乐谱时,我希望服务器发送 scores.json
。我尝试将其移动到 a[[.pot
中的不同位置,但没有成功。
使用
fs.readFile
(非阻塞版本)并异步处理结果
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 asynchronously
fs.readFile("./data/scores.json", (error, data) => {
if (error) {
console.log(error);
return res.sendStatus(500); // Handle error
}
const scores_data = JSON.parse(data);
// Check for duplicate name
const names = scores_data.daily_puzzle.scores.map((entry) => entry.name);
if (names.includes(user_name)) {
console.log("Name used already!");
return res.sendFile(__dirname + "/public/dup_name.html");
}
// Add name and score to list (rest of the logic remains the same)
// ...
});
});
或
app.post("/publish-score", async (req, res) => {
console.log("request name: ", user_name);
console.log("request score: ", req.body.score);
let user_score = req.body.score;
try {
// Read scores file asynchronously
const data = await fs.promises.readFile("./data/scores.json");
const scores_data = JSON.parse(data);
// Check if name already in score list
const names = scores_data.daily_puzzle.scores.map((entry) => entry.name);
console.log("names: ", names);
if (names.includes(user_name)) {
console.log("Name used already!");
return res.sendFile(__dirname + "/public/dup_name.html");
}
// Add name and score to list
let push_name = user_name || "NoName";
let push_score = user_score || "NoScore";
scores_data.daily_puzzle.scores.push({ name: push_name, score: push_score });
// Write data to scores.json asynchronously
await fs.promises.writeFile("./data/scores.json", JSON.stringify(scores_data));
console.log("Data written successfully to the file");
// Success message or redirect (optional)
// res.send("Score published successfully!");
} catch (error) {
console.error("Error processing score:", error);
// Handle errors appropriately (e.g., send error response)
}
});