小编Jes*_*ton的帖子

逐行解析生成的node.js子进程的输出

我有一个PhantomJS/CasperJS脚本,我正在使用node.js脚本运行process.spawn().由于CasperJS不支持require()模块,我试图从CasperJS打印命令stdout,然后从我的node.js脚本中读取它们spawn.stdout.on('data', function(data) {});,以便执行诸如将对象添加到redis/mongoose之类的事情(复杂,是的,但似乎比为此设置Web服务更简单...)CasperJS脚本执行一系列命令,并创建20个需要添加到我的数据库的屏幕截图.

但是,我无法弄清楚如何将data变量(a Buffer?)分解为行...我已经尝试将其转换为字符串然后进行替换,我已经尝试过spawn.stdout.setEncoding('utf8');但似乎没有任何工作......

这就是我现在所拥有的

var spawn = require('child_process').spawn;

var bin = "casperjs"
//googlelinks.js is the example given at http://casperjs.org/#quickstart
var args = ['scripts/googlelinks.js'];
var cspr = spawn(bin, args);

//cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function (data) {
    var buff = new Buffer(data);
    console.log("foo: " + buff.toString('utf8'));
});

cspr.stderr.on('data', function (data) {
    data += '';
    console.log(data.replace("\n", "\nstderr: "));
});

cspr.on('exit', function (code) {
    console.log('child process exited with code ' + …
Run Code Online (Sandbox Code Playgroud)

node.js phantomjs

19
推荐指数
3
解决办法
2万
查看次数

package.json适用于不同的环境?

我有一个node.js应用程序,我刚刚部署到Heroku,这取决于canvas模块.但是,该模块需要cairo图形库和长篇故事,我需要使用这个画布前缀的预先配置版本.

通常,我的package.json依赖项看起来像:

  "dependencies" : {
    "canvas"   :  "0.10.0",
    "express" :  "2.5.6",
    "jade" : "0.20.1"
  }
Run Code Online (Sandbox Code Playgroud)

但是为了让我的应用程序在Heroku上工作,我必须从github中获取fork

  "dependencies" : {
    "canvas"   :  "git://github.com/elspoono/node-canvas-heroku.git#master",
    "express" :  "2.5.6",
    "jade" : "0.20.1"
  }
Run Code Online (Sandbox Code Playgroud)

是否有可能有一个"Heroku-only"版本的package.json?或者在package.json中有另一个部分,我可以在dev环境中"覆盖"画布依赖性吗?

heroku node.js npm

5
推荐指数
1
解决办法
4977
查看次数

Sequelize.js - "创建"或"构建"调用期间的模型关联

我有一个数据模型,其中需要关联/外键.有没有办法在模型创建过程中强制执行该约束而不会陷入鸡/蛋的情况?

假设我有一个User类,要求至少有一个device与之关联.同样,device必须属于用户.像这样的东西(未经测试的代码,不介意语法错误):

User = db.define("user", {
    name: Sequelize.STRING
})

Device = db.define("device", {
    uuid: Sequelize.STRING
})

User.hasMany(Device)
Run Code Online (Sandbox Code Playgroud)

我想确保在create第一次调用时,我拥有所有Device信息以及所有User信息.保持"胖模特,瘦小的控制器"我想把它放到我的模型中.可以这样做吗?

user = User.create(
    name: "jesse"
    device:
        uuid: "84e824cb-bfae-4d95-a76d-51103c556057"
)
Run Code Online (Sandbox Code Playgroud)

我可以覆盖该create方法吗?或者before我可以使用某种类型的保存事件挂钩?

node.js sequelize.js

5
推荐指数
1
解决办法
3962
查看次数

在querySelectorAll()中使用冒号

我正在尝试使用该querySelectorAll()方法来获取网页中的链接,但我想忽略以"javascript:"开头的链接或使用其他协议,例如"itpc://"

有没有办法将这些包含在"not()"伪选择器中?

document.querySelectorAll("a:not([href^=javascript]):not([href^=itpc])"); //works
document.querySelectorAll("a:not([href^=javascript:]):not([href^=itpc://])"); //doesn't work
Run Code Online (Sandbox Code Playgroud)

即使第一种方法在当前页面上工作正常,也无法保证它将在我将使用它的每个页面上都能正常工作,所以我真的希望能够检测到该冒号.

javascript css css-selectors css3 selectors-api

4
推荐指数
1
解决办法
3176
查看次数

Sequelize.js-异步验证器

使用Sequelize.js是否可以使用异步验证器?我想在保存模型之前检查是否存在关联。像这样:

User = db.define("user", {
    name: Sequelize.STRING
},
{
    validate:
        hasDevice: ->
            @getDevices().success (devices) ->
                throw Exception if (devices.length < 1)
              return
})

# .... Device is just another model

User.hasMany(Device)
Run Code Online (Sandbox Code Playgroud)

还是有一种方法可以强制该检查同步运行?(不理想)

node.js sequelize.js

3
推荐指数
1
解决办法
1364
查看次数

multiple node.js + always =错误:观看EMFILE

我在一台服务器上运行三个node.js应用程序,所有这些都使用Foreman通过always.js启动应用程序.

零负载下,我的一个应用程序始终抛出错误Error: watch EMFILE并重新启动.该应用程序仍然有效,尽管不断抛出该错误...我试图找到有关此错误的更多信息,但那里没有很多("打开太多文件"或"增加ulimit".)

我的问题是:为什么会在闲置的 Web应用程序上发生这种情况- 为什么只有三分之一?它没有做任何事......这是always.js的一个问题吗?(有两个其他节点应用程序始终在这台机器上运行...)只是找一些关于导致此错误的信息,如果它是严重的,以及如何解决它.

谢谢!

仅供参考,这是控制台的相关摘录:

01:17:07 web.1     | app listening on http://0.0.0.0:5000
01:17:07 web.1     | NODE_ENV = development
01:17:07 web.1     | opened connection to database!
01:17:07 web.1     | [always] Error: watch EMFILE
01:17:07 web.1     | [always] Error: watch EMFILE
01:17:07 web.1     |     at errnoException (fs.js:636:11)
01:17:07 web.1     |     at FSWatcher.start (fs.js:663:11)
01:17:07 web.1     |     at Object.watch (fs.js:691:11)
01:17:07 web.1     |     at Object.oncomplete (/home/jesse/local/nodev0.6.14/lib/node_modules/always/lib/monitor.js:62:36)
01:17:07 web.1     | [always] Restarting app.js …
Run Code Online (Sandbox Code Playgroud)

node.js

2
推荐指数
1
解决办法
1978
查看次数