环境: NodeJS,Express,DynamoDB(但真的可以是任何数据库)
场景: 需要读取大量记录并作为可下载文件返回给用户.这意味着我不能一次缓冲所有内容,然后在Express的响应中发送它.此外,我可能需要多次执行查询,因为在一个查询中可能不会返回所有数据.
建议的解决方案: 使用可以通过管道传输到Express中的响应流的可读流.
我首先创建了一个继承自stream.Readable的对象,并实现了一个推送查询结果的_read()方法.问题是_read()中调用的数据库查询是异步的,但stream.read()是同步方法.
当流通过管道传递给服务器的响应时,在db查询甚至有机会执行之前,会多次调用读取.因此,查询被多次调用,即使查询的第一个实例完成并执行push(null),其他查询也会完成,并且在EOF之后出现"push()"错误.
谢谢
function DynamoDbResultStream(query, options){
if(!(this instanceof DynamoDbResultStream)){
return new DynamoDbResultStream(query, options);
}
Readable.call(this, options);
this.dbQuery = query;
this.done = false;
}
util.inherits(DynamoDbResultStream, Readable);
DynamoDbResultStream.prototype._read = function(){
var self = this;
if(!this.done){
dynamoDB.query(this.dbQuery, function(err, data) {
if (!err) {
try{
for(i=0;i<data.Items.length;i++){
self.push(data.Items[i]);
}
}catch(err){
console.log(err);
}
if (data.LastEvaluatedKey) {
//Next read() should invoke the query with a new start key
self.dbQuery.ExclusiveStartKey = data.LastEvaluatedKey;
}else{
self.done=true;
self.push(null);
}
}else{
console.log(err);
self.emit('error',err); …Run Code Online (Sandbox Code Playgroud) 我希望我的应用程序允许用户使用Facebook,Google,Amazon ...等帐户才能登录我的应用程序.这可以通过AWS Cognito正常工作.
但是,如果用户没有任何登录,应用程序是否可以通过编程方式创建用户登录?
用户将提供id和密码,app将该信息发送给认证提供者以创建新的登录/帐户.
我不需要实现自己的身份验证机制,并担心如何存储密码等.
根据我的研究,我认为现有的身份验证提供程序甚至OpenID等其他服务都无法做到这一点.
如果我不想实现自己的登录存储和身份验证,您还有其他选择吗?它不一定需要与AWS Cognito集成.
authentication federated-identity amazon-web-services amazon-cognito
这似乎很简单,但我找不到答案.我使用cbind()组合了两个向量.
> first = c(1:5)
> second = c(6:10)
> values = cbind(first,second)
Run Code Online (Sandbox Code Playgroud)
当我想使用值[1,2]检索单个元素时,除了实际元素之外,我总是得到列名.
> values[1,2]
second
6
Run Code Online (Sandbox Code Playgroud)
如何在没有列名的情况下获取值?
我知道我可以删除矩阵中的列名,如下文所示:如何从R中的矩阵中删除列名?但是我怎样才能保留矩阵,只得到我想要的值?
使用 ServiceStack(面向消息的 RESTful Web 服务)实现对象属性更新的正确方法是什么?
如果客户端需要更新 Foo.bar 并且只有 Foo 的 id。
我应该接受包含 Foo id 和 Foo.bar 值的 FooBarUpdate 请求对象吗?这意味着我必须为每个属性更新创建单独的请求,或者至少为那些我希望更新的请求(或它们的组合)。这似乎也不符合 RESTful 标准。
或者,如果我接受包含具有更新属性的整个 Foo 的 Foo 请求对象,客户端将首先需要检索 Foo,然后服务将检查哪些属性已更新。这似乎是不必要的开销。
最后,如果我接受 Foo 请求但只有 id 和修改后的属性值 (Foo.bar),则 Foo 对象是不完整的,根据其他帖子,这可能会导致混淆,有人认为它是一个完整的对象。
我正在运行一个php docker映像(php:5.6-apache),该映像具有apache的错误,并使用符号链接将访问日志分别重定向到STDERR和STDOUT。
当我在前台运行docker映像或访问docker容器日志时,可以看到STDOUT输出。但是我看不到任何错误(即使我生成php错误)。
知道为什么会这样,我如何解决?
我正在为Mac运行docker(但是我认为这没有任何区别)
谢谢
access.log -> /dev/stdout
error.log -> /dev/stderr
other_vhosts_access.log -> /dev/stdout
Run Code Online (Sandbox Code Playgroud)
编辑/解决:
正如@BMitch在下面提到并证明的那样,STDERR重定向可以正常工作。问题出在PHP配置上。如果我使用记录了错误error_log(),它将输出到日志。但是,如果我遇到php错误,例如调用未定义的函数,该错误将永远不会出现在日志中。这似乎有点不一致。任何状况之下, ...
我必须在其中创建一个php.ini文件/usr/local/etc/php/并添加以下两个参数:
log_errors = On
error_log = /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)
然后重新启动docker容器。这导致所有PHP错误都被记录并输出到STDERR。有关示例,请参见@German的答案。
apache ×1
asynchronous ×1
database ×1
docker ×1
express ×1
javascript ×1
node.js ×1
php ×1
r ×1
rest ×1
servicestack ×1
stderr ×1
updates ×1