Код, работающий в отдельном файле js, но не в приложении ReactJS

#javascript #node.js #reactjs #forms

Вопрос:

Я использую следующий фрагмент кода, чтобы получить значение из скрипта python. Он отлично работает, когда я запускаю его как таковой в отдельном файле:

 var spawn = require('child_process').spawn;
const process = spawn('python', ['src/components/BTC_NT.py']);

process.stdout.on('data', data => {
    test = data.toString();
});

process.stderr.on('data', (data) => {
    console.log('err results: %j', data.toString('utf8'))
});
process.stdout.on('end', function(){
    console.log(test);
});
 

Но когда я запускаю его в своем приложении React, как это:

 import React from "react";
import { useState } from "react";

const Main = () => {
    const [Text, setText] = useState('');
    const [showPrice, setShowPrice] = useState('');
    const getVal = (e) => {
        e.preventDefault();
        var spawn = require('child_process').spawn;
        const process = spawn('python', ['src/components/BTC_NT.py']);

        process.stdout.on('data', data => {
            test = data.toString();
        });

        process.stderr.on('data', (data) => {
            console.log('err results: %j', data.toString('utf8'))
        });
        process.stdout.on('end', function(){
            console.log(test);
            setShowPrice(test);
        });
    }
    return(
        <div className="Main">
            <p>
                The following cryptocurrencies are available: Bitcoin(BTC), Ethereum(ETH). 
            </p>
            <form onSubmit={getVal}>
                <label htmlFor="CurrencyName">Currency Name: </label>
                <input type="text" className="CurrencyName" value={Text} onChange={(e) => setText(e.target.value)} />
                <button style={{marginLeft:"5px"}} type="submit">Submit</button>
            </form>
            {showPrice !== '' amp;amp; showPrice}
        </div>
    )
}
export default Main;
 

Я получаю ошибку — «Ошибка типа: порождение не является функцией».

Любая помощь в этом будет признательна.

Комментарии:

1. Специфичные для узла JS не могут использоваться в браузерах.

Ответ №1:

Когда вы запускаете файл локально, вы, по-видимому, используете какую-то другую среду выполнения (вероятно node.js), когда вы запускаете файл в react, вы запускаете его в браузере, где отсутствуют такие вещи, как child_process