关于如何在Node.js中实现文件自动重载的任何想法?每次更改文件时,我都厌倦了重启服务器.显然Node.js的require()功能如果已经被要求就不会重新加载文件,所以我需要做这样的事情:
var sys = require('sys'),
http = require('http'),
posix = require('posix'),
json = require('./json');
var script_name = '/some/path/to/app.js';
this.app = require('./app').app;
process.watchFile(script_name, function(curr, prev){
posix.cat(script_name).addCallback(function(content){
process.compile( content, script_name );
});
});
http.createServer(this.app).listen( 8080 );
Run Code Online (Sandbox Code Playgroud)
在app.js文件中我有:
var file = require('./file');
this.app = function(req, res) {
file.serveFile( req, res, 'file.js');
}
Run Code Online (Sandbox Code Playgroud)
但这也没有用 - 我在process.compile()声明中得到一个错误,说没有定义'require'.process.compile正在评估app.js,但对node.js全局变量没有任何线索.
我希望这行JavaScript:
"foo bar baz".match(/^(\s*\w+)+$/)
Run Code Online (Sandbox Code Playgroud)
返回类似的东西:
["foo bar baz", "foo", " bar", " baz"]
Run Code Online (Sandbox Code Playgroud)
但它只返回最后捕获的匹配:
["foo bar baz", " baz"]
Run Code Online (Sandbox Code Playgroud)
有没有办法获得所有捕获的匹配?
这是我对React的一个反复出现的问题.componentDidMount保证在第一次渲染组件时触发该方法,因此它似乎是一个自然的地方,可以进行高度和偏移等DOM测量.但是,很多时候,在组件生命周期的这个阶段,我收到了错误的样式读数.该组件是在DOM,当我与调试器打破,但它尚未在屏幕上绘制.我的问题是宽度/高度设置为100%的元素.当我进行测量时componentDidUpdate- 一切正常,但此方法不会在组件的初始渲染时触发.
所以我的问题是 - 什么时候被componentDidMount解雇,因为在完成所有浏览器绘制之后它显然没有被触发.
编辑: 此Stackoverflow问题处理相同的主题:
假设我们有这段代码(暂时忘记原型):
function A(){
var foo = 1;
this.method = function(){
return foo;
}
}
var a = new A();
Run Code Online (Sandbox Code Playgroud)
是每次运行函数A时重新编译的内部函数?或者更好(以及为什么)这样做:
function method = function(){ return this.foo; }
function A(){
this.foo = 1;
this.method = method;
}
var a = new A();
Run Code Online (Sandbox Code Playgroud)
或者javascript引擎是否足够智能,不会每次都创建一个新的"方法"功能?特别是Google的v8和node.js.
此外,欢迎任何关于何时使用哪种技术的一般性建议.在我的具体示例中,使用第一个示例非常适合我,但我知道外部函数将被多次实例化.
我有这种情况:
<div style="width: 100px; padding: 5px 15px 5px">Some text longer than 100px</div>
Run Code Online (Sandbox Code Playgroud)
如果我设置溢出:隐藏在div上,文本仍然会出现在右边的15px填充区域之外:
++----------------------------+------+
++----------------------------+------+
||This text should stop here -| but i|
++----------------------------+------+
++----------------------------+------+
Run Code Online (Sandbox Code Playgroud)
可以在不添加额外元素来保存文本的情况下完成此操作.任何浏览器中的任何解决方案都可以,我只是想知道它是否可行.
我正在为我正在进行的项目执行CSV导入工具.客户端需要能够在excel中输入数据,将它们导出为CSV并将它们上传到数据库.例如,我有这个CSV记录:
1, John Doe, ACME Comapny (the typo is on purpose)
Run Code Online (Sandbox Code Playgroud)
当然,这些公司被保存在一个单独的表中并与外键相关联,因此我需要在插入之前发现正确的公司ID.我计划通过将数据库中的公司名称与CSV中的公司名称进行比较来实现此目的.如果字符串完全相同,则比较应返回0,并返回一些随着字符串变得更大而变大的值,但是strcmp不会在此处删除它,因为:
"Acme公司"和"Acme Comapny"应该有一个非常小的差异指数,但"Acme公司"和"Cmea Mpnyaco"应该有一个非常大的差异指数或"Acme公司"和"Acme Comp.".即使字符数不同,也应该有一个小的差异索引.此外,"Acme Company"和"Company Acme"应返回0.
因此,如果客户端在输入数据时输入类型,我可以提示他选择他最想插入的名称.
是否有一个已知的算法来做到这一点,或者我们可以发明一个:)?
我正在使用带有Mako模板的Pylons,我想避免一直打字:
${ h.some_function_that_outputs_html() | n }
Run Code Online (Sandbox Code Playgroud)
我想以某种方式标记函数,或者将变量标记为安全(您可以在Django中执行此操作),因此我不必一直使用pipe-en.有任何想法吗?
有人可以向我解释这个奇怪的事情:
在python shell中我输入以下西里尔字符串:
>>> print '?????'
?????
Run Code Online (Sandbox Code Playgroud)
但是当我键入:
>>> print u'?????'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
由于第一个tring正确出来,我估计我的OS X终端可以代表unicode,但事实证明它不能在第二种情况下.为什么?
编辑:这不是马丁指出的错误.我只是穿越夏令时,因此1小时差异.
我想计算"2010年3月29日"和"2010年3月9日"之间的天数差异,所以我有以下代码:
((new Date(2010, 2, 29)).getTime() - (new Date(2010, 2, 8)).getTime()) / 86400000
Run Code Online (Sandbox Code Playgroud)
86400000是一天中的毫秒数,并且以毫秒为单位返回日期之间的差异,因此这应该有效.只是它并不完全.我明白了
20.958333333333332
Run Code Online (Sandbox Code Playgroud)
这两个日期之间的差异是错误的.它应该是1814400000(21天86400000),但实际上是1810800000.
此外,如果我改变差异:
((new Date(2010, 2, 28)).getTime() - (new Date(2010, 2, 7)).getTime()) / 86400000
Run Code Online (Sandbox Code Playgroud)
相同的差异,只有一天回来,我得到正常的结果.
只有当我们试图得到(xy)x在2010年3月29日之后且y在2010年3月29日之前时,才会发生这种情况.
我在Mac上的Safari 4和Firefox 3.6以及Windows 7上的IE 8中得到了这个.没有尝试过其他浏览器.
我做错了什么或这是一个已知的错误?
我已设法使用此正则表达式拆分CSV文件:"/,(?=(?:[^ \"] \"[^ \"] \")(?![^ \"] \"))/"
但我最终得到了一个包含开头和结尾双引号的字符串数组.现在我需要一个正则表达式来删除分隔符双引号的字符串.
据我所知,CSV格式可以用双引号封装字符串,并且所有已经是字符串一部分的双引号都会加倍.例如:
我的"其他"猫
变
"我的""其他""猫"
我基本上需要的是一个正则表达式,它将用一系列(N/2 - 向下舍入)双引号替换N个双引号的所有序列.
或者,还有更好的方法 ?提前致谢.