如何从nodeJS中通过execfile
启动的进程将数据发送回节点?最好是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传递信息,然后在节点中操纵该信息。这是实现这个目标的好方法吗?
答案 0 :(得分:4)
即使我收到了良好且可行的答案,我最终还是将所有内容输出到casperjs中的stdout,然后通过JSON数组将其发送回PHP。
所以在casperjs中我写了类似的东西:
console.log(JSON.stringify(targetLink))
然后在节点中,我可以通过JSON.parse
访问它,并以我想要的任何方式操作数据。
编辑:
我经常遇到这种情况,所以或者你可以将CasperJS POST
信息发送到网络端点,它有时更干净,但是如果你担心安全性而又需要增加开销确保只有授权的抓取工具才能将数据发布到您的端点。
答案 1 :(得分:2)
我通过运行CasperJs作为服务在NodeJS上使用了CasperJS。
基本上,NodeJS通过http.get()向CasperJS脚本发出请求,该脚本将JSON对象作为响应返回。
此处有一个示例以及有关CasperJS脚本如何启动Web服务器的更多详细信息:
答案 2 :(得分:1)
您可能更喜欢使用类似SpookyJS(https://github.com/WaterfallEngineering/SpookyJS)的东西,它可以在Node.js程序中使用CasperJ。
我不知道你是否会找到你想要的功能,但无论如何它都可能更干净。