www.charleen.top网站的后端server.js
const express = require("express");
const child_process = require('child_process');
const fs = require("fs");
const path = require("path");
const app = express();
const port = 3000;
const { exec } = require('child_process');
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 静态文件目录
app.use(express.static("/www/wwwroot"));
// 默认跳转到index.html
app.get("/", function(req, res) {
res.redirect("/index.html");
});
// 处理allword.txt文件请求
app.get("/allword.txt", function(req, res) {
fs.readFile("/www/wwwroot/allword.txt", "utf8", function(err, data) {
if (err) {
console.error(err);
res.status(500).send("读取文件失败");
} else {
res.send(data);
}
});
});
// 处理unknow.txt文件请求
app.get("/unknow.txt", function(req, res) {
console.log("+++");
fs.readFile("/www/wwwroot/unknow.txt", "utf8", function(err, data) {
if (err) {
console.error(err);
res.status(500).send("读取文件失败");
} else {
res.send(data);
}
});
});
// 处理不认识按钮点击请求
app.post("/unknow", function(req, res) {
const unknownLine = req.body.line;
fs.appendFile("/www/wwwroot/unknow.txt", unknownLine + "\n", function(err) {
if (err) {
console.error(err);
res.status(500).send("写入文件失败");
} else {
console.log("yes");
res.sendStatus(200);
}
});
});
// 下一个按钮路由
app.get('/next', (req, res) => {
const index = parseInt(req.query.index);
if (index < lines.length - 1) {
res.send(lines[index + 1]);
} else {
res.send("已经没有了");
}
});
// 上一个按钮路由
app.get('/previous', (req, res) => {
const index = parseInt(req.query.index);
if (index > 0) {
res.send(lines[index - 1]);
} else {
res.send("已经没有了");
}
});
// 定义一个数组来存储文件中的每一行数据
let lines = [];
// 读取文件并获取lines
fs.readFile(path.join(__dirname, 'unknow.txt'), 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
// 将数据按换行符分割成行数组
const lines = data.split('\n');
// 设置Express路由
app.get('/remove', (req, res) => {
console.log("+++\n");
const index = parseInt(req.query.index);
console.log(index+"index");
console.log(lines.length+"lines.length");
if (index >= 0 && index < lines.length) {
lines.splice(index, 1);
fs.writeFile(path.join(__dirname, 'unknow.txt'), lines.join('\n'), 'utf8', (err) => {
if (err) {
console.error(err);
res.send("删除失败1"); console.log("删除失败1");
} else {
res.send("删除成功");
}
});
} else {
res.send("index非法"); console.log("index非法");
}
});
});
// 处理/api/data1的GET请求,返回allword.txt文件的内容
app.get('/allwordchange', (req, res) => {
console.log("进入啦!!!");
const filePath = path.join(__dirname, '/allword.txt');
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
res.status(500).send('Error reading allword.txt');
} else {
res.send(data);
}
});
});
// 处理/api/data1的POST请求,将请求体中的数据写入allword.txt文件
app.post('/allwordchange', (req, res) => {
const filePath = path.join(__dirname, '/allword.txt');
const newData = req.body.data;
fs.writeFile(filePath, newData, 'utf8', (err) => {
if (err) {
console.error(err);
res.status(500).send('Error writing to allword.txt');
} else {
res.send('Data written to data1.txt');
}
});
});
// 处理/api/data2的GET请求,返回unknow.txt文件的内容
app.get('/unknowchange', (req, res) => {
const filePath = path.join(__dirname, '/unknow.txt');
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
res.status(500).send('Error reading unknow.txt');
} else {
res.send(data);
}
});
});
// 处理/api/data2的POST请求,将请求体中的数据写入unknow.txt文件
app.post('/unknowchange', (req, res) => {
const filePath = path.join(__dirname, '/unknow.txt');
const newData = req.body.data;
fs.writeFile(filePath, newData, 'utf8', (err) => {
if (err) {
console.error(err);
res.status(500).send('Error writing to unknow.txt');
} else {
res.send('Data written to unknow.txt');
}
});
});
// 定义分割行内容的函数
const splitContent = (line, set) => {
return {
front: line.substring(0, set - 1),
back: line.substring(set - 1)
};
};
// 定义处理文件的函数
const separate = (req, res) => {
// 读取文件路径
const filePath = `/www/wwwroot/allword.txt`;
// 读取文件内容
fs.readFile(filePath, { encoding: 'utf8' }, (err, data) => {
if (err) {
console.error('读取文件时出错', err);
return res.status(500).send('内部服务器错误');
}
var zj = "nih,a-o:";
zj = zj.replace(/,/g, "b");
console.log(zj); // 输出:nihba-o:
// 删除所有符号
console.log('删除符号完毕');
const cleanedData= data.replace(/\:/g, '').replace(/\(/g,"").replace(/\)/g,"").replace(/\-/g,"").replace(/\;/g,"").replace(/\:/g,"");
console.log(cleanedData);
// 创建字符数组
const all = [];
// 按行读取并处理内容
cleanedData.split('\n').forEach((line) => {
// console.log(line +"这一行?");
let set = 0;
const minn=[];
for (let i = 0; i < line.length; i++) {
// console.log("第"+i+"个字符"+line[i]+":"+/\u4e00-\u9fa5/.test(line[i])+"##");
if (/[\u4e00-\u9fa5]/.test(line[i])) {
set = i + 1;
// console.log("找到第一个汉字"+"位于"+set+"$");
minn.push(set);
}
}
if(minn==false){
minn[0]=0;
}
//console.log(minn+"$$");
set=minn[0];
//console.log("set :"+set+"#s");
if (set > 0) {
const { front, back } = splitContent(line, set);
// console.log(set+"$");
// console.log(front+"&"+back);
all.push(front);
all.push(back);
} else {
all.push(line);
// console.log(line+"@");
}
});
// console.log('写入all完毕');
for(let i=0;i<8;i++){
// console.log(all[i]+",");
}
// 清空文件内容
fs.truncate(filePath, (err) => {
if (err) {
console.error('清空文件时出错', err);
return res.status(500).send('内部服务器错误');
}
// 写入处理后的内容
fs.writeFile(filePath, all.join('\n'), { encoding: 'utf-8' }, (err) => {
if (err) {
console.error('写入文件时出错', err);
return res.status(500).send('内部服务器错误');
}
console.log('分离完毕');
res.send('处理完成');
});
});
});
};
// 创建路由并使用处理文件的函数
app.get('/separate', separate);
// 定义处理文件的函数
const separate2 = (req, res) => {
// 读取文件路径
const filePath = `/www/wwwroot/unknow.txt`;
// 读取文件内容
fs.readFile(filePath, { encoding: 'utf8' }, (err, data) => {
if (err) {
console.error('读取文件时出错', err);
return res.status(500).send('内部服务器错误');
}
// 删除所有符号
console.log('删除符号完毕');
const cleanedData= data.replace(/\:/g, '').replace(/\(/g,"").replace(/\)/g,"").replace(/\-/g,"").replace(/\;/g,"").replace(/\:/g);
// 创建字符数组
const all = [];
// 按行读取并处理内容
cleanedData.split('\n').forEach((line) => {
// console.log(line +"这一行?");
let set = 0;
const minn=[];
for (let i = 0; i < line.length; i++) {
// console.log("第"+i+"个字符"+line[i]+":"+/\u4e00-\u9fa5/.test(line[i])+"##");
if (/[\u4e00-\u9fa5]/.test(line[i])) {
set = i + 1;
// console.log("找到第一个汉字"+"位于"+set+"$");
minn.push(set);
}
}
if(minn==false){
minn[0]=0;
}
//console.log(minn+"$$");
set=minn[0];
//console.log("set :"+set+"#s");
if (set > 0) {
const { front, back } = splitContent(line, set);
// console.log(set+"$");
// console.log(front+"&"+back);
all.push(front);
all.push(back);
} else {
all.push(line);
// console.log(line+"@");
}
});
// console.log('写入all完毕');
for(let i=0;i<8;i++){
// console.log(all[i]+",");
}
// 清空文件内容
fs.truncate(filePath, (err) => {
if (err) {
console.error('清空文件时出错', err);
return res.status(500).send('内部服务器错误');
}
// 写入处理后的内容
fs.writeFile(filePath, all.join('\n'), { encoding: 'utf-8' }, (err) => {
if (err) {
console.error('写入文件时出错', err);
return res.status(500).send('内部服务器错误');
}
console.log('分离完毕');
res.send('处理完成');
});
});
});
};
// 添加一个路由到 deleteChinese 函数
app.get('/separate2', separate2);
// // 添加一个路由到 deleteData 函数
//app.get('/deletevacc', deletevacc);
// 定义 deletevacc 路由
app.get('/deletevacc', (req, res) => {
console.log("删除空行进入程序");
// 读取文件
fs.readFile(path.join('/www/wwwroot/allword.txt'), 'utf8', (err, data) => {
if (err) {
console.error('读取文件时出错:', err);
return res.status(500).send('服务器内部错误');
}
// 删除空行
const lines = data.split('\n').filter(line => line.trim() !== '');
const newData = lines.join('\n');
// 写回文件
fs.writeFile(path.join('/www/wwwroot/allword.txt'), newData, 'utf8', (err) => {
if (err) {
console.error('写入文件时出错:', err);
return res.status(500).send('服务器内部错误');
}
console.log('文件中的空行已删除');
res.send('空行已删除');
});
});
});
app.get('/deletevacc2', (req, res) => {
console.log("删除空行进入程序");
// 读取文件
fs.readFile(path.join('/www/wwwroot/unknow.txt'), 'utf8', (err, data) => {
if (err) {
console.error('读取文件时出错:', err);
return res.status(500).send('服务器内部错误');
}
// 删除空行
const lines = data.split('\n').filter(line => line.trim() !== '');
const newData = lines.join('\n');
// 写回文件
fs.writeFile(path.join('/www/wwwroot/unknow.txt'), newData, 'utf8', (err) => {
if (err) {
console.error('写入文件时出错:', err);
return res.status(500).send('服务器内部错误');
}
console.log('文件中的空行已删除');
res.send('空行已删除');
});
});
});
// 写入code.cppt文件
app.post('/codewrite', (req, res) => {
const filePath = path.join(__dirname, '/code.cpp');
const newData = req.body.data;
fs.writeFile(filePath, newData, 'utf8', (err) => {
if (err) {
console.error(err);
res.status(500).send('Error writing to code.cpp');
} else {
res.send('Data written to code.cpp');
}
});
});
app.post('/compile', (req, res) => {
console.log("sss");
const code = req.body.code;
// 编译并运行C++代码
const output = child_process.execSync(`g++ -o output /www/wwwroot/code.cpp && ./output`, {
stdio: ['pipe', 'pipe', 'pipe'],
shell: true,
env: process.env
});
// 将输出结果发送给前端
res.send(output.toString());
});
//下面这个要改
// app.post('/compile', (req, res) => {
// // 读取C++代码
// fs.readFile('/www/wwwroot/code.cpp', (err, codeCpp) => {
// if (err) {
// console.error('Error reading code.cpp:', err);
// return res.status(500).send('Error reading file');
// }
// // 构造C++代码和输入内容的命令
// const input = "122";
// const command = `g++ -o code /www/wwwroot/code.cpp && ./code ${input}`;
// // 执行命令并获取输出结果
// child_process.exec(command, (err, stdout, stderr) => {
// if (err) {
// console.error('Error executing command:', err);
// return res.status(500).send('Error executing command');
// }
// // 打印输出结果
// console.log(stdout);
// res.send(stdout);
// });
// });
// });
app.listen(port, function() {
console.log(`服务器运行在 http://localhost:${port}`);
});