有一种简单的方法可以验证ES6 Set是否包含特定数组的值?我想要一个不需要我使用引用的解决方案:
var set = new Set();
var array = [1, 2];
set.add(array);
set.has(array); // true
set.add([3, 4]);
set.has([3, 4]); // false
Run Code Online (Sandbox Code Playgroud)
到目前为止,我的解决方案是将所有内容存储为字符串,但这很烦人:
set.add([3, 4].toString());
set.has([3, 4].toString()); // true
Run Code Online (Sandbox Code Playgroud) 使用请求模块进行HTTP请求时是否可以指定端口号?我在文档中没有看到任何相关内容:
var request = require('request');
// this works
request({
method: 'GET',
url: 'http://example.com'
}, function(error, response, body) {
if (error) console.log(error);
console.log(body);
});
// this does not work
request({
method: 'GET',
url: 'http://example.com:10080'
}, function(error, response, body) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
另外,当我运行第二个版本时,我的程序中绝对没有任何事情发生(几乎就像从未提出过请求).
我也知道我可以在使用核心http
模块发出请求时指定端口号.为什么请求模块中没有选项?
编辑:我之前应该提到过这个,但是我在Heroku上运行这个应用程序.
当我在本地运行请求时(使用请求模块),我可以指定端口号,并获得成功的回调.
当我从Heroku运行请求时,没有触发回调,并且nginx没有显示请求的记录.
我疯了吗?是否有某些原因Heroku阻止我向特定端口号发出出站HTTP请求?
这真让我烦恼.我可以轻松地创建一个继承以下方法的新类Array.prototype
:
var MyArray = function() {};
MyArray.prototype = Array.prototype;
var myArray = new MyArray();
myArray.push(1); // this is allowed
Run Code Online (Sandbox Code Playgroud)
相同的继承模式似乎不适用于Set.prototype
:
var MySet = function() {};
MySet.prototype = Set.prototype;
var mySet = new MySet();
mySet.add(1); // TypeError: Method Set.prototype.add called on incompatible receiver
Run Code Online (Sandbox Code Playgroud)
这是一个实施问题吗?是否有另一种继承模式可行?我在节点v0.12和Canary中尝试了相同的结果.
编辑:这个解决方案有效,但我仍然不确定为什么上述方法不起作用:
var MySet = function(array) {
var inst = new Set(array);
inst.__proto__ = MySet.prototype;
return inst;
}
MySet.prototype = Object.create(Set.prototype);
Run Code Online (Sandbox Code Playgroud) 这是一个“如果它没有坏,就不要修理它”的经典故事
我使用 Node.js 创建了一个相对简单的 HTTP 请求处理程序。我通过将请求正文的 SHA-1 与作为请求标头的签名进行匹配来验证请求:
var http = require('http');
var crypto = require('crypto');
var secret = process.env.MY_SECRET;
var requestListener = function(req, res) {
if (req.method === 'POST') {
var body = '';
req.on('data', function(data) {
body += data;
});
req.on('end', function() {
var signature = req.headers['x-signature'];
var hash = crypto.createHmac('sha1', secret)
.update(body)
.digest('hex')
.toUpperCase();
if (signature === hash) {
// request is authorized
}
});
}
};
var server = http.createServer(requestListener);
server.listen(3000);
Run Code Online (Sandbox Code Playgroud)
这工作得很好,除了一切都很丑陋,而且我还是想实现 Express.js 的其他功能。我重写了代码如下:
var crypto …
Run Code Online (Sandbox Code Playgroud) 帮助!突然间,我在尝试从转储中恢复本地数据库时收到此错误:
$ pg_restore --no-acl --no-owner --dbname my_db tmp/latest.dump
pg_restore: [archiver (db)] Error while INITIALIZING:
pg_restore: [archiver (db)] could not execute query: ERROR: unrecognized configuration parameter "idle_in_transaction_session_timeout"
Command was: SET idle_in_transaction_session_timeout = 0;
Run Code Online (Sandbox Code Playgroud)
在本地,我运行的是 postgresql 9.6.3。转储来自运行 9.4 的服务器。由于此命令停止工作,我的机器没有已知的配置更改。
我知道这idle_in_transaction_session_timeout
是在 9.6 中引入的,但我仍然应该能够加载 9.4 生成的转储。那么什么给呢?
我是 ES6 对象的新手,在尝试调用已代理的数组Proxy
时遇到了我不明白的错误。concat
背景:
\n\n我认为 ES6Proxy
可以完美地作为一种方式来验证我的 React/Redux 应用程序中的减速器函数的“纯度”。我可以将我的状态对象包装在代理中,如果我尝试改变该对象,该代理会抛出错误。我正在使用基于on-change库的东西来执行此操作:
const triggersOnChange = (object, onChange) => {\n const handler = {\n get (target, property, receiver) {\n try {\n return new Proxy(target[property], handler)\n } catch (err) {\n return Reflect.get(target, property, receiver);\n }\n }\n\n defineProperty (target, property, descriptor) {\n onChange()\n return Reflect.defineProperty(target, property, descriptor)\n }\n\n deleteProperty (target, property) {\n onChange()\n return Reflect.deleteProperty(target, property)\n }\n }\n\n return new Proxy(object, handler)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n这是我打算如何使用代理包装器的示例测试:
\n\ndescribe(\'reducer\', () …
Run Code Online (Sandbox Code Playgroud) javascript ×4
ecmascript-6 ×3
node.js ×2
set ×2
arrays ×1
express ×1
http ×1
inheritance ×1
postgresql ×1
redux ×1
request ×1
sha1 ×1