每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
我正在制作一个由CSS3驱动的简单登陆页面.为了让它看起来很棒,有一个<a>很大的问题:
@keyframes splash {
from {
opacity: 0;
transform: scale(0, 0);
}
50% {
opacity: 1;
transform: scale(1.1, 1.1);
}
to {
transform: scale(1, 1);
}
}
Run Code Online (Sandbox Code Playgroud)
为了让它更加精彩,我添加了一个悬停动画:
@keyframes hover {
from {
transform: scale(1, 1);
}
to {
transform: scale(1.1, 1.1);
}
}
Run Code Online (Sandbox Code Playgroud)
但问题来了!我分配了这样的动画:
a {
/* Some basic styling here */
animation: splash 1s normal forwards ease-in-out;
}
a:hover {
animation: hover 1s infinite alternate ease-in-out;
}
Run Code Online (Sandbox Code Playgroud)
一切都运行得很好:<a>飞溅到用户脸上,当他徘徊时有一个很好的振动.一旦用户模糊,<a>平滑的东西突然结束并<a>重复splash动画.(这对我来说是合乎逻辑的,但我不想要它)如果没有一些JavaScript类Jiggery …
只是好奇
$files = glob(cacheme_directory()."*");
foreach($files as $file)
{
$filemtime=filemtime ($file);
if (time()-$filemtime>= 172800)
{
unlink($file);
}
}
Run Code Online (Sandbox Code Playgroud)
我只是想确定代码是否正确.谢谢.
我想知道在express中相同布局中实现相同内容的多个版本/语言的最佳方法是什么.
我应该这样做吗?
app.get("/", function(req, res) {
res.render(language + "/index");
});
Run Code Online (Sandbox Code Playgroud)
还是有更智能/更好的方式?
我有一个root服务器,上面运行着几个node.js项目.它们应该在自己的进程和目录中单独运行.考虑这个文件结构:
/home
+-- /node
+-- /someProject | www.some-project.com
| +-- index.js
| +-- anotherFile.img
| +-- ...
+-- /anotherProject | www.another-project.com
| +-- /stuff
| +-- index.js
| +-- ...
+-- /myWebsite | www.my-website.com
| +-- /static
| +-- index.js
| +-- ...
+-- ... | ...
Run Code Online (Sandbox Code Playgroud)
每个index.js应该开始与它的一个单独的处理cwd集合到它的父文件夹(someProject,anotherProject等).
想想ov vHosts.每个项目都会启动一个监听自己域名的Web服务器.而且存在问题.只有一个脚本可以启动,因为它们都尝试绑定到端口80.我深入研究了node.js API并寻找可能的解决方案:child_process.fork().
可悲的是,这不是很好.当我尝试将服务器实例发送到主进程(稍后发出请求)或者从主服务器request和response从主服务器到服务器的对象时,我得到错误.这是因为node.js在内部尝试将这些高级对象转换为JSON字符串,然后将其重新转换为其原始形式.这使得所有对象都失去了它们的引用和功能.
第二种方法 child.js
var http = require("http");
var server = http.createServer(function(req, res) {
// stuff...
});
server.listen(80); …Run Code Online (Sandbox Code Playgroud) 如何从TLS客户端Hello消息中提取服务器名称指示.我很难理解这个关于TLS扩展的非常神秘的RFC 3546,其中定义了SNI.
到目前为止我已经理解的事情:
如果我能找到该长度字节的确切位置,那么提取SNI将非常简单.但是我如何首先到达那个字节?
我想在Node.js中做一些基本的字符串测试.假设我有一个表格,用户输入他们的名字,我想检查它是垃圾还是真名.
令人高兴的(或者可悲的是我的支票)我从世界各地获得用户,这意味着他们的名字包含非英文字符,例如ä ö ü ß é.我习惯使用,/[A-Za-z -]{2,}/但这与名字不匹配"Jan Buschtöns".
我是否必须手动将每个可能的非英语但拉丁字符添加到我的RegEx才能工作?我不希望RegEx喜欢100多个字符/[A-Za-z -äöüÄÖÜßéÉèÈêÊ...]{2,}/.
我想加密输入流并通过TCP将其发送到另一台服务器.到现在为止还挺好.一切顺利,直到连接关闭.几乎在任何情况下都不满足192位所需的块大小,并且脚本崩溃wrong final block length,尽管我打开了自动填充.
在使用旧版界面时,似乎只有自动填充才有效.我在这里做错了吗?
var net = require("net")
, crypto = require("crypto");
var credentials = { algorithm: "aes192", password: "password" }
, decipher = crypto.createDecipher(credentials.algorithm, credentials.password)
, cipher = crypto.createCipher(credentials.algorithm, credentials.password);
decipher.setAutoPadding(true);
cipher.setAutoPadding(true);
net.createServer(function(socket) {
socket.pipe(socket);
}).listen(2000);
var socket = net.connect(2000);
socket.pipe(decipher).pipe(process.stdout);
process.stdin.pipe(cipher).pipe(socket);
socket.write("Too short.");
socket.end();
Run Code Online (Sandbox Code Playgroud)
在我理想的Node.js世界中,当源流关闭时,(De-)密码流将自动填充最后一个块.我认为这是一个设计缺陷.
除了打开一个问题,我该如何规避这种行为呢?我是否必须在Socket和(De-)Cipher Streams之间放置一个字节计数器?
我正在node.js中通过TCP检索一些stringifyed JSON,想要解析它.所以我的方法与此类似.我缩短并简化了它,所以你不必知道周围的逻辑.
socket.on("data", function(data) {
console.log(data.toString()); // Shows the original stringifyed version
console.log(JSON.parse(data.toString())); // Doesn't work
});
Run Code Online (Sandbox Code Playgroud)
完整的(美化的)JSON就是这样.如您所见,没有错误.
{
"result": "success",
"source": "chat",
"success": {
"message": "test",
"time": 1331770513,
"player": "silvinci"
}
}
Run Code Online (Sandbox Code Playgroud)
但JSON.parse(data.toString())总是把这个愚蠢的错误抛给我:
{"result":"success","source":"console","success":{"time":1331762264,"line":"20
^
SyntaxError: Unexpected token {
at Object.parse (native)
at Socket.<anonymous> (/home/node/api.js:152:35) // irrelevant from here on
at Socket.emit (events.js:67:17)
at TCP.onread (net.js:347:14)
Run Code Online (Sandbox Code Playgroud)
所以我想:"JSON-String可能出现什么问题.让我们直接尝试.不应该工作." 惊喜,惊喜!有效.当我直接输入字符串时为什么它可以工作?
我知道mongoose.model("myModel")返回myModel模型.但是我如何让Mongoose给我一个目前已注册的所有模型的数组/对象/列表?
我认为这有点是一个设计缺陷.