这是后端的端点
const getTest = (req, res) => {
try {
fs.writeFileSync("modul/test/test.js", JSON.parse(req.body.code) + `\n module.exports = {start};`);
res.status(200).send("File written successfully");
} catch (error) {
console.error('Error writing to file:', error);
res.status(500).send('Error writing to file');
return;
}
const buildCommand = 'docker build -t sandboxtest .';
exec(buildCommand, (buildError, buildStdout, buildStderr) => {
if (buildError) {
res.status(500).send('Error building Docker image');
return;
}
const dockerCommand = 'docker run --name sandboxtest -v /modul/test/testcontroller.js:/sandboxtest/code sandboxtest';
exec(dockerCommand, (error, stdout, stderr) => {
if (error) {
res.status(500).send('Error executing Docker command');
return;
}
exec('docker logs -f sandboxtest > modul/test/output.txt | docker rm sandboxtest', (rmError, rmStdout, rmStderr) => {
if (rmError) {
console.error(`Error removing Docker container: ${rmError}`);
res.status(500).send('Error removing Docker container');
return;
}
console.log('Docker container removed successfully');
const data = fs.readFileSync('modul/test/output.txt', 'utf-8');
console.log("Data: ", data);
res.status(200).json(data);
});
});
});
这是前端的端点
try {
const response = await fetch('http://localhost:5000/test', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ code: JSON.stringify(code) })
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log(data);
// outputModifier(JSON.parse(data));
} catch (e) {
console.log('Error:', e);
}
所以当我从前端发出请求并且不写入文件时,一切正常 记录结果的网页 但是当我将代码从前端写入文件以创建 docker-image 时,出现错误 网页错误 任务是在虚拟机上运行代码,以便不可能从前端发送恶意代码。但是有这个问题... 如果您知道如何解决或有其他选择,请告诉我
我尝试添加异步、等待、Promises
嗯,问题出在nodemon上...... 因为写入文件后,它正在更新后端,而前端认为服务器正在关闭,从而导致了错误......