我有一个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应用程序,我刚刚部署到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环境中"覆盖"画布依赖性吗?
我有一个数据模型,其中需要关联/外键.有没有办法在模型创建过程中强制执行该约束而不会陷入鸡/蛋的情况?
假设我有一个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
我可以使用某种类型的保存事件挂钩?
我正在尝试使用该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)
即使第一种方法在当前页面上工作正常,也无法保证它将在我将使用它的每个页面上都能正常工作,所以我真的希望能够检测到该冒号.
使用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应用程序,所有这些都使用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)