Estoy creando esta aplicación web sobre una librería que recomienda libros en función de las selecciones de los usuarios de libros. Quiero que ejecute un script de python y para eso, he usado un proceso secundario mirando este hilo Cómo llamar a una función de Python desde Node.js
Aquí está el código:
const spawn = require("child_process").spawn; const pythonProcess = spawn('python',["../../../python/book_recommendation.py","Timeline"]); const Recommendations = pythonProcess.stdout.on('data', (data) => { console.log(data); }); module.exports = Recommendations;Quiero que este código se ejecute cuando haga clic en el producto y me dirija a la página productScreen. Pero me sale el error "TypeError: Spawn no es una función". Con algunas búsquedas en Google, descubrí que estoy llamando a esta función a través de reaccionar y no de node.js. Estoy usando reaccionar como frontend y node.js como backend. ¿Como puedó resolver esté problema?
Así es como importé esto en la página de reacción ProductScreen.js
import { Recommendations } from "../machine-learning/recommendation_engine"Aquí está la estructura de archivos de mi proyecto.
Actualizar:
const spawn = require("child_process").spawn; const pythonProcess = spawn('python',["../python/book_recommendation.py","Timeline"]); app.get("/product/:id", (req, res) => { pythonProcess.stdout.on('data', (data) => { console.log(data); }); });Moví el código anterior en la carpeta backend server.js ahora. ¿Cómo lo llamo?
No creo que sea una buena arquitectura sabia. Pero si insiste en hacerlo de esa manera, debe generar el proceso secundario cuando lleguen las solicitudes. Luego podría canalizar su salida al flujo de respuesta. En este ejemplo, estoy usando una canalización que es algo más segura que mystream.pipe .
const spawn = require("child_process").spawn; const { pipeline } = require('stream'); app.get("/python-process", (request, response) => { const pythonProcess = spawn('python', [ "../python/book_recommendation.py", "Timeline" ]); // pipe the python process stream into the response stream pipeline(pythonProcess, response, (err) => err && console.warn(err)); });Tenga en cuenta que no he probado esto, pero es la esencia de cómo podría hacerlo.