Большое спасибо за помощь!
Я нашел решение для моей проблемы.
Для начала, в моем приложении я работаю с React и Webpack. Чтобы решить мою проблему, я структурировал свой файл Server.js (где я настраивал поведение Express) следующим образом:
const express = require('express');
const app = express();
const port = process.env.PORT || 5000;
const fs = require("fs")
const spawn = require('child_process').spawn;
// console.log that your server is up and running
app.listen(port, () => console.log(`Listening on port ${port}`));
app.use(cors())
// create a GET route
app.get('/express_backend/:filename', (body, res) => {
const f = body.params.filename;
// open EnergyPlus Programm with a specific file which is stored localy
let child = spawn(
'C:\\EnergyPlusV9-0-1\\EP-Launch.exe',
[process.cwd()+"src/"+ f + ".idf"]
);
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
child.on('close', function (code) {
console.log('child process exited with code ' + code);
});
res.send('EnergyPlus is running');
});
// default options
app.use(fileUpload());
//post the uploaded file into the local storage
app.post('/upload', function(req, res) {
...
}
// The name of the input field (i.e. "sampleFile") is used to retrieve the uploaded file
let sampleFile = req.files.file;
// Use the mv() method to place the file localy
fs.writeFile(__dirname + `/upload/${sampleFile.name}`, sampleFile.data,
(err) => {
....
})
});
Как упомянул Нино Филиу в своем посте, я интегрировал функцию порождения детей в server.js. Сначала я вызываю EP launch.ex с конкретным файлом, который я хранил локально (эта функция не является частью этого ответа). «C: \ EnergyPlusV9-0-1 \ EP-Launch.exe» - это путь к EnergyPlus. "[process.cwd () +" src / "+ f +" .idf "]" помогает EnergyPlus открыть директорию локального сохраненного поля.
Поэтому важная вещь, касающаяся моей проблемы, - это app.get, который я запускаю в своем App.js.
В App.js я вызываю дочерний процесс порождения так:
class App extends Component {
constructor(props){
super(props)
this.state = {filename: null}
};
componentDidMount() {
...
};
callBackendAPI = async () => {
...
};
//trigger the spawn child function within server.js
startEnergyPlus = (e) =>{
fetch (`http://localhost:5000/express_backend/${this.state.filename}`, {
method: "GET"
});
render(){
return(
<div className="App">
<button onClick={this.startEnergyPlus}>start app</button>
</div>
};
И это все. Надеюсь, это понятно и полезно. Если нет, пожалуйста, оставьте комментарий!