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 传递信息,然后在 node.js 中操作该信息。这是实现这一目标的好方法吗?

4

3 回答 3

4

尽管我收到了不错且可行的答案,但我最终还是将所有内容输出到 casperjs 中的标准输出,然后通过 JSON 数组将其发送回 PHP。

所以在 casperjs 我写了类似的东西:

console.log(JSON.stringify(targetLink))

然后在节点中,我可以通过它访问它JSON.parse并以我想要的任何方式操作数据。

编辑:

我经常遇到这种情况,所以或者你可以让 CasperJSPOST将信息发送到 Web 端点,它有时更干净,但如果你担心安全性并且你需要确保只有授权的爬虫可以将数据发布到您的端点。

于 2013-06-20T17:58:03.283 回答
2

我通过将 CasperJs 作为服务运行,在 NodeJS 上使用了 CasperJS。

基本上 NodeJS 通过 http.get() 向 CasperJS 脚本发出请求,该脚本返回一个 JSON 对象作为响应。

这里有一个关于 CasperJS 脚本如何启动 Web 服务器的示例和更多详细信息:

CasperJS 将数据传回 PHP

于 2013-06-20T04:15:04.833 回答
1

您可能更喜欢使用像 SpookyJS ( https://github.com/WaterfallEngineering/SpookyJS ) 这样的东西,它提供了在 Node.js 程序中使用 CasperJs 的能力。

我不知道你是否会找到你想要的功能,但无论如何它可能更干净。

于 2013-06-19T23:12:57.290 回答