Я работаю в приложении, похожем на 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
с консоли.
Любая помощь очень ценится:)