Nodejsへの非同期関数はrubyファイルを呼び出します

リキ

こんにちは、以下のコードはnode.jsの非同期関数です。この関数は、pdfファイルを生成するrubyファイルを呼び出してからpdfファイルをbase64に変換し(pdfファイルを削除)、base64文字列を返す必要があります!だから私の問題は、execがrubyファイルを呼び出すと、以下のようなエラーが発生することです、どうすればそれを解決できますか?奇妙なことに、非同期関数を使用せずにコードを正しく使用すると、正しく使用できます。実は無理矢理使わないといけないのです

ディレクトリ構造:

server.js
Router/Rapportini.js --> Call RapportiniController.js
Controller/RapportiniController.js --> Call RapportiniModel.js
Model/RapportiniModel.js -> This is file below

エラー:

 { Error: Command failed: ruby report.rb prova prova2 prova3
ruby: No such file or directory -- report.rb (LoadError)

    at ChildProcess.exithandler (child_process.js:275:12)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at maybeClose (internal/child_process.js:925:16)
    at Socket.stream.socket.on (internal/child_process.js:346:11)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at Pipe._handle.close [as _onclose] (net.js:567:12)
  killed: false,
  code: 1,
  signal: null,
  cmd: 'ruby report.rb prova prova2 prova3' }

コード:

const fs = require('fs');
var base64 = require('file-base64');
var exec = require("child_process").exec;


async function GenerazioneRapportino()
{
  exec('ruby report.rb prova prova2 prova3', function (err, stdout, stderr) {

    var encode="";

    if(stderr)
    {  
       console.log("Err: ",err);  
       return encode;  
    }

    else
    {
         console.log("File generate: ",stdout);

         base64.encode('rapportino.pdf', function(err, base64String) {

           fs.unlink('rapportino.pdf', (err) => {

              if (err) 
              {
              console.log("Err del file rappportino.pdf");
              }
              else
              {              
              console.log('rapportino.pdf was deleted');
              }

           });

          encode=base64String;          
          return encode;

        });
    }

   });

};

コードRuby:

require "prawn"
require "prawn/table"


puts "sono dentro ruby"

logo=Dir.pwd+"/logo.jpg"
tecnicofirma=Dir.pwd+"/logo.jpg"
clientefirma=Dir.pwd+"/logo.jpg"
ragionesociale=ARGV[0]
nomecantiere=ARGV[1]
note=ARGV[2]

First= ['aa', 'aa', 'aaa', 'ddd', 'eee', 'fff']
Second = ['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
Third = ['a', 'b', 'c', 'd', 'e', 'f']

Prawn::Document.generate("rapportino.pdf") do
  move_down 10
  image logo,:width=>540,:height=>60
  move_down 30
  text "Ragione Sociale:   "+ragionesociale
  move_down 30
  text "Nome Cantiere:     "+nomecantiere
  move_down 30
  text "Note:  "+note
  move_down 30
  table([
  ["Articolo - Risorsa", "Descrizione", "Quantita"],
  *[First,Second, Third]
  .transpose
  ], :width => 550)
  move_down 170
  text "Il Tecnico:", :align => :left
  text "Il Cliente:", :align => :right
  image tecnicofirma,  :width=>90, :height=>50, :position => :left
  image clientefirma,  :width=>90, :height=>50, :position => :right
end
マーロム

これはルビーエラーのようです。たぶん、pathモジュールを使用してフルパスを取得すると、この問題が解決します。すでに試しましたか?

私はそれを試しました:

const { exec } = require('child_process')

async function run() {
    exec('ruby test.rb', (err, stdout, stderr) => {
      console.log(err, `ruby returns ${stdout}`)
    });
}

run()

この非同期コードですべて問題ありません...実際には、rubyファイルが存在しないようです。実行する場合node server.js、execへの現在のディレクトリはベースディレクトリであるため、rubyファイルは同じディレクトリにある必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

非同期関数呼び出しの後に、ファクトリから角度のある$ resourceを返します

分類Dev

RxJSを使用して、他の非同期関数呼び出しが解決されるまで関数呼び出しをバッファリングする方法

分類Dev

ループ内の非同期関数の階層を呼び出しますか?

分類Dev

PythonファイルへのJavascript関数呼び出しは、データではなくファイルの内容を返しますか?

分類Dev

cart.jsonファイルへのデータの追加(非同期呼び出し)

分類Dev

nodejs-関数内で複数の非同期呼び出しを実行するための最良の方法は?

分類Dev

Node.jsまたはJavaScriptの非同期関数呼び出しを同期関数にラップする方法

分類Dev

接続プールへのNodeJS非同期MySQL呼び出しは結果を返しません

分類Dev

nodejsで別のメソッドを呼び出す前に、n個の非同期関数を実行します

分類Dev

別のファイルで関数を呼び出すことはできません(nodejs + express)

分類Dev

複数ファイル関数はC ++を呼び出します

分類Dev

非同期関数の複数の呼び出しを並列化します

分類Dev

Javascript / Typescriptは、デフォルトの定数を非同期関数呼び出しからの値としてエクスポートします

分類Dev

C#の非非同期関数内でawaitを使用して非同期関数を呼び出す方法は?

分類Dev

Vue.jsが外部jsファイルから非同期関数を呼び出す

分類Dev

非同期関数mainを呼び出す正しい方法は?

分類Dev

同期関数で非同期関数を呼び出す方法は?

分類Dev

JavaScriptのforループ内で非同期関数を呼び出す

分類Dev

非同期関数呼び出しが完了するのを待っています

分類Dev

APIへの非同期呼び出しを処理する方法は?

分類Dev

ReactのUseEffect()内で非同期関数を呼び出す方法は?

分類Dev

C ++は別のcppファイルからインライン関数を呼び出します

分類Dev

Xamarinは、値を返すオーバーライドから非同期関数を呼び出します

分類Dev

複数の非同期呼び出しを伴うForループ-2番目の非同期関数の最後の項目を繰り返し出力します

分類Dev

PHP mail()関数にファイルへの呼び出しを含める方法

分類Dev

缶自己の呼び出し非同期機能は、パブリック関数を返します

分類Dev

非同期呼び出し関数でのNodeJsエラー

分類Dev

jspファイルにjava関数を作成し、別のjspファイルから呼び出します

分類Dev

javascript onclick(または任意の)イベントで非同期関数を呼び出す

Related 関連記事

  1. 1

    非同期関数呼び出しの後に、ファクトリから角度のある$ resourceを返します

  2. 2

    RxJSを使用して、他の非同期関数呼び出しが解決されるまで関数呼び出しをバッファリングする方法

  3. 3

    ループ内の非同期関数の階層を呼び出しますか?

  4. 4

    PythonファイルへのJavascript関数呼び出しは、データではなくファイルの内容を返しますか?

  5. 5

    cart.jsonファイルへのデータの追加(非同期呼び出し)

  6. 6

    nodejs-関数内で複数の非同期呼び出しを実行するための最良の方法は?

  7. 7

    Node.jsまたはJavaScriptの非同期関数呼び出しを同期関数にラップする方法

  8. 8

    接続プールへのNodeJS非同期MySQL呼び出しは結果を返しません

  9. 9

    nodejsで別のメソッドを呼び出す前に、n個の非同期関数を実行します

  10. 10

    別のファイルで関数を呼び出すことはできません(nodejs + express)

  11. 11

    複数ファイル関数はC ++を呼び出します

  12. 12

    非同期関数の複数の呼び出しを並列化します

  13. 13

    Javascript / Typescriptは、デフォルトの定数を非同期関数呼び出しからの値としてエクスポートします

  14. 14

    C#の非非同期関数内でawaitを使用して非同期関数を呼び出す方法は?

  15. 15

    Vue.jsが外部jsファイルから非同期関数を呼び出す

  16. 16

    非同期関数mainを呼び出す正しい方法は?

  17. 17

    同期関数で非同期関数を呼び出す方法は?

  18. 18

    JavaScriptのforループ内で非同期関数を呼び出す

  19. 19

    非同期関数呼び出しが完了するのを待っています

  20. 20

    APIへの非同期呼び出しを処理する方法は?

  21. 21

    ReactのUseEffect()内で非同期関数を呼び出す方法は?

  22. 22

    C ++は別のcppファイルからインライン関数を呼び出します

  23. 23

    Xamarinは、値を返すオーバーライドから非同期関数を呼び出します

  24. 24

    複数の非同期呼び出しを伴うForループ-2番目の非同期関数の最後の項目を繰り返し出力します

  25. 25

    PHP mail()関数にファイルへの呼び出しを含める方法

  26. 26

    缶自己の呼び出し非同期機能は、パブリック関数を返します

  27. 27

    非同期呼び出し関数でのNodeJsエラー

  28. 28

    jspファイルにjava関数を作成し、別のjspファイルから呼び出します

  29. 29

    javascript onclick(または任意の)イベントで非同期関数を呼び出す

ホットタグ

アーカイブ