2013-06-19 2 views
3

Как я могу отправить данные обратно на узел, из процесса, запущенного через execfile в nodeJS? предпочтительно в формате JSON.Как отправить данные обратно на узел из casperjs?

Это как мой код выглядит как прямо сейчас:

//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. 
    }); 
}); 

The 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, но я не знаю, как это сделать.

Я думал о создании нового маршрута в экспресс, а затем заставляю casperjs посещать этот маршрут и передавать информацию через GET, а затем манипулировать этой информацией в узле. Это хороший способ достичь этого?

ответ

4

Даже если я получил хорошие и жизнеспособные ответы, я в конечном счете, в конечном итоге выводит все на стандартный вывод в casperjs, чтобы отправить его обратно на PHP через массив JSON.

так в casperjs я написал что-то вроде:

console.log(JSON.stringify(targetLink))

А затем в узел, я мог бы просто получить доступ, что через JSON.parse данные и манипулировать ими в любом случае я хочу.

EDIT:

Я столкнулся с этой ситуацией чаще, чем нет, поэтому в качестве альтернативы вы можете сделать CasperJS POST информацию на веб-конечной точки, иногда чище, но это добавляет накладные расходы, если вы беспокоитесь о безопасности и вы должны убедиться, что только авторизованные скребки могут отправлять данные в конечную точку.

1

Возможно, вы предпочитаете использовать что-то вроде SpookyJS (https://github.com/WaterfallEngineering/SpookyJS), которые предлагают возможность использования CasperJs внутри программы Node.js.

Я не знаю, найдете ли вы эту функцию, но она, вероятно, будет чище.

1

Я использовал CasperJS на NodeJS, запуская CasperJs как услугу.

В основном NodeJS через http.get() выполняет запрос к скрипту CasperJS, который возвращает объект JSON в качестве ответа.

Вот пример и более подробную информацию о том, как сценарий CasperJS может запустить веб-сервер:

CasperJS passing data back to PHP

Смежные вопросы