diff --git a/client/src/index.tsx b/client/src/index.tsx index f7a8caf9cbc9acf93cde8f3c2afda427b6dc3468..1d446093026d0e7fe3d60a865389ad561a12df8b 100644 --- a/client/src/index.tsx +++ b/client/src/index.tsx @@ -1,15 +1,15 @@ -import * as React from 'react'; -import { createRoot } from 'react-dom/client'; -import { Component } from 'react-simplified'; -import { HashRouter, Route } from 'react-router-dom'; -import { NavBar, Card, Alert, Row, Column, Form, Button } from './widgets'; -import taskService from './task-service'; +import * as React from "react"; +import { createRoot } from "react-dom/client"; +import { Component } from "react-simplified"; +import { HashRouter, Route } from "react-router-dom"; +import { NavBar, Card, Alert, Row, Column, Form, Button } from "./widgets"; +import taskService from "./task-service"; class App extends Component { - input: string = ''; - stdout: string = ''; - stderr: string = ''; - language = 'js'; + input: string = ""; + stdout: string = ""; + stderr: string = ""; + language = "js"; render() { return ( @@ -62,10 +62,10 @@ class App extends Component { } } -let root = document.getElementById('root'); +let root = document.getElementById("root"); if (root) createRoot(root).render( <> <App></App> - </>, + </> ); diff --git a/client/src/task-service.tsx b/client/src/task-service.tsx index 33a255277aece57f021aeba7770082e8d7d06f67..7be9eece550499648e4fd1e8a4d194ff6eed9219 100644 --- a/client/src/task-service.tsx +++ b/client/src/task-service.tsx @@ -1,6 +1,6 @@ -import axios from 'axios'; +import axios from "axios"; -axios.defaults.baseURL = 'http://localhost:3000/api/v2'; +axios.defaults.baseURL = "http://localhost:3000/api/v2"; export type Task = { id: number; @@ -8,15 +8,21 @@ export type Task = { done: boolean; }; type Response_data = { - stdoutData: ''; - stderrData: ''; + stdoutData: ""; + stderrData: ""; }; class TaskService { - create(input: string, language: string) { - return axios - .post<Response_data>('/tasks', { input: input, language: language }) - .then((response) => response.data); + async create(input: string, language: string) { + try { + const response = await axios.post<Response_data>("/tasks", { + input: input, + language: language, + }); + return response.data; + } catch (error) { + throw error; + } } } diff --git a/server/src/task-router.ts b/server/src/task-router.ts index 7535cb71247e81c6fbc57fdda5d21132bf4ead2e..89e6b7809b811f655ca3db9d26c3c627cfbe5c42 100644 --- a/server/src/task-router.ts +++ b/server/src/task-router.ts @@ -1,35 +1,34 @@ -import express from 'express'; +import express from "express"; +import { spawn } from "node:child_process"; const router = express.Router(); -const { spawn } = require('node:child_process'); - -router.post('/tasks', (request, response) => { +router.post("/tasks", (request, response) => { const data = request.body.input; const language = request.body.language; let setup; - if (language === 'python') { - setup = ['run', '--rm', 'python:3.8', 'python', '-c', `${data}`]; - } else if (language === 'js') { - setup = ['run', '--rm', 'node-image', 'node', '-e', `${data}`]; + if (language === "python") { + setup = ["run", "--rm", "python:3.8", "python", "-c", `${data}`]; + } else if (language === "js") { + setup = ["run", "--rm", "node:latest", "node", "-e", `${data}`]; } - const ls = spawn('docker', setup); + const ls = spawn("docker", setup); let response_data = { - stdoutData: '', - stderrData: '', + stdoutData: "", + stderrData: "", }; - ls.stdout.on('data', (data: string) => { + ls.stdout.on("data", (data: string) => { response_data.stdoutData += data; }); - ls.stderr.on('data', (data: string) => { + ls.stderr.on("data", (data: string) => { response_data.stderrData += data; }); - ls.on('close', (exit_status: number) => { + ls.on("close", (exit_status: number) => { response.send(response_data); }); });