3

execfilenodeJSで起動されたプロセスからノードにデータを送信するにはどうすればよいですか? できれば JSON 形式で。

これは私のコードが今どのように見えるかです:

//index.js NodeJS
var execFile = require('child_process').execFile;
var express = require('express');

app.get('/', function(req, res) {
    var lchecker = execFile('/usr/local/bin/casperjs', [myprogram, myargs]);
    lchecker.stdout.on('data', function(data) {
        var dataObject = JSON.parse(data); //This throws an error.
    }); 
});

私が呼び出している casperjs スクリプトは、次のような JSON のような文字列を返します。

console.log("[{href: targetLink.href, anchor: targetLink.anchor, isLive: 0, isFollowed: null}]");

これは私が得るエラーです

JSON のような文字列を解析しようとすると、次のようなエラーが表示されます。

19 Jun 16:46:43 - [nodemon] starting node index.js
undefined:1
[{href: targetLink.href, anchor: targetLink.anchor, isLive: 1, isFollow: 1}]
  ^
Unexpected token h

したがって、私のJSONは無効です。心から、casperjsからノードにデータを送信するより良い方法があると確信していますが、その方法はわかりません.

Expressで新しいルートを作成し、casperjsにそのルートを訪問させてGET経由で情報を渡し、ノードでその情報を操作することを考えていました。これはこれを達成するための良い方法ですか?

4

3 に答える 3

4

適切で実行可能な回答を受け取りましたが、最終的にはすべてを casperjs の stdout に出力し、JSON 配列を介して PHP に送り返すことになりました。

だからcasperjsで私は次のように書いた:

console.log(JSON.stringify(targetLink))

ノードでは、そこからアクセスしてJSON.parse、好きな方法でデータを操作できます。

編集:

私は頻繁にこの状況に遭遇したので、別の方法として、CasperJSPOSTを Web エンドポイントへの情報にすることができます。これはよりクリーンな場合もありますが、セキュリティが心配で、許可されたスクレーパーのみがアクセスできるようにする必要がある場合は、オーバーヘッドが追加されます。エンドポイントにデータを投稿します。

于 2013-06-20T17:58:03.283 に答える
2

CasperJsをサービスとして実行することにより、NodeJSでCasperJSを使用しました。

基本的に、http.get() を介した NodeJS は、レスポンスとして JSON オブジェクトを返す CasperJS スクリプトにリクエストを行います。

CasperJS スクリプトが Web サーバーを起動する方法の例と詳細を次に示します。

CasperJS がデータを PHP に戻す

于 2013-06-20T04:15:04.833 に答える