无法从Laravel控制器功能运行节点脚本文件

3pmvbmvn  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(135)

我正在尝试从Laravel控制器函数运行节点js文件函数。基本上称为translate.js的节点js文件具有可以translate input text to required language的函数(如英语到印地语等)。
我已经通过调试进行了一些测试,但每次从Laravel控制器函数执行节点脚本时都会出现错误。

收到错误:

命令“node D:\Laragon\www\krutech\translate.js“我想尝试将文本转换为印地语。”hi”失败。退出代码:1(一般错误)工作目录:D:\拉腊贡\www\克鲁泰克\公共输出:================错误输出:================文件名、目录名或卷标语法不正确。

其中D:\Laragon\www\krutech\translate.js是Laravel项目根目录中的节点js文件。
其中D:\Laragon\www\krutech为Laravel项目
翻译.js代码:

const { translate } = require('@vitalets/google-translate-api');

function translateText(text, targetLang) {
    return translate(text, { to: targetLang })
        .then(res => {
            return res.text;
        })
        .catch(err => {
            console.error(err);
            return "Translation failed";
        });
}

module.exports = {
    translateText: translateText
};

const textToTranslate = process.argv[2];
const targetLang = process.argv[3];

if (textToTranslate && targetLang) {
    translateText(textToTranslate, targetLang)
        .then(res => console.log(res))
        .catch((err) => console.error(`Translation failed: ${err}`));
} else {
    console.error('Please provide text to translate and target language code');
}

Laravel控制器功能代码:

public function index()
    {
        $text = 'I want to try convert my text into hindi language.';
        $targetLang = 'hi';

        $pathToTranslateJS = base_path('translate.js');
        $command = "node " . $pathToTranslateJS . " " . escapeshellarg($text) . " " . $targetLang;

        $process = new Process([$command]);
        $process->run();

        if (!$process->isSuccessful()) {
            throw new ProcessFailedException($process);
        }

        $translatedText = $process->getOutput();
        return  $translatedText;

    }

当我尝试使用此命令从命令行运行节点文件时,它工作正常,我得到了所需的结果。
命令:node translate.js "I want to try convert my text into hindi language." hi
结果:मैं अपने टेक्स्ट को हिंदी भाषा में बदलने की कोशिश करना चाहता हूं।
但是Laravel控制器有什么问题?我找不到解决的方法?

我当前的Laravel版本是7.29

3zwtqj6y

3zwtqj6y1#

https://laravel.com/docs/10.x/processes#invoking-processes

use Illuminate\Support\Facades\Process; 

    $result = Process::run('ls -la'); 
    $output = $result->output();

这在Process类的正式文档中
当你使用

$process = new Process([$command]);
$process->run();
e4eetjau

e4eetjau2#

从我所看到的你的错误代码在公共文件夹内执行,而你把js文件在根目录,尝试移动它在公共或更改代码,它转到根目录,然后执行

相关问题