写入文件后运行 docker 容器的代码编辑器(沙盒)问题

问题描述 投票:0回答:1

这是后端的端点

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

node.js file docker-machine
1个回答
0
投票

嗯,问题出在nodemon上...... 因为写入文件后,它正在更新后端,而前端认为服务器正在关闭,从而导致了错误......

© www.soinside.com 2019 - 2024. All rights reserved.