execSync остается на месте и не возвращает никакого значения - PullRequest
0 голосов
/ 03 июня 2019

Я работаю в приложении, похожем на CodeCademy, где пользователи вводят какой-то код, и он запускается, а затем результат отображается в консоли. Для этого я создал экспресс-среду, и на веб-сайте пользователи могут ввести свой код, а затем отправить его через запрос POST.

Моя проблема со следующим кодом:

const fs = require('fs');
const {execSync} = require('child_process')

function run(code) {
  var path = __dirname + '/../temp/temp.js';
  fs.writeFileSync(path, code);
  console.log('file written');
  let out = execSync('node ' + path); // code stays put
  console.log('file executed') // does not happen
  return out.toString();
}

module.exports = {
  run: run
};

Я записываю пользовательский ввод в файл temp.js, который затем планирую выполнить с помощью execSync. Первый console.log выполнен, второй нет.

Я звоню по следующему маршруту:

router.post('/', (req, res, next) => {
  res.render('index', {
    instructions: reader.readInstructions('lesson1.txt'),
    console: runner.run(req.body.editor) 
  })
})

Странная вещь в этой проблеме заключается в том, что этот код:

const fs = require('fs');
const {execSync} = require('child_process')

String code = 'var a = 0\nvar b = 5\nconsole.log(a*b)';

fs.writeFileSync('../temp/temp.js', 'code');
let out = execSync('node ../temp/temp.js');
console.log(out.toString());

работает так же, как и ожидалось (возвращает значение строки), если я запускаю его с командой

node runner.js

с консоли.

Любая помощь очень ценится:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...