我通过API GW调用的node4 lambda函数生成一系列缓慢的API调用.为了不让用户等到一切都完成,我打算让我的代码看起来像这样:
function(event, context, callback) {
...
// Return users API GW call now
callback(null, data);
// Do the heavy lifting afterwards.
longApiCall().then(otherLongApiCalls)
}
Run Code Online (Sandbox Code Playgroud)
但现在我在AWS文档中读到:"回调将等到Node.js运行时事件循环为空,然后冻结进程并将结果返回给调用者"
这是否意味着API GW在longApiCalls完成之前或之后返回响应数据?
如果之后,是否有建议的方法如何在一切结束之前"早退"?
callback amazon-web-services node.js aws-lambda aws-api-gateway
我很难返回具有最大值的节点,并进一步处理该节点.
这是我如何返回具有最大值的节点:
START n=node(startnode)
MATCH n-[:TYPE]-m
RETURN m
ORDER BY m.value DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但现在我在子查询中
START n=node(somenode)
MATCH n-[:TYPE1]-q
WITH DISTINCT q
MATCH q-[:TYPE2]-m
Run Code Online (Sandbox Code Playgroud)
然后ORDER BY .. LIMIT 1显然不再起作用了,因为我想要一个结果q.这是怎么做到的?
此外,一旦我拥有m最大值,q我也需要处理它:
RETURN q, m.maxvalue, x.anothervalue
Run Code Online (Sandbox Code Playgroud)
从
MATCH m-[:HAS_ONE_LINK_TO]->x
Run Code Online (Sandbox Code Playgroud)
因此,虽然我一直在玩集合(collect(m)),但我还没有找到一种方法将它们扩展回"结果行"以应用它MATCH.
在neo4j上使用cypher查询,在有向循环图中,我需要BFS查询和每个深度级别的目标节点排序.
对于深度排序,应使用自定义的"总路径成本函数",基于此计算
r.followrank开始和结束节点之间的所有关系属性.在任何搜索深度级别n,连接到高级别节点的节点的级别n-m, m>0应该高于连接到级别低级别节点的节点n-m.反向方向性应该导致0级(这意味着节点及其子树仍然是排名的一部分).
我正在使用neo4j社区-19.9.M01.到目前为止,我采用的方法是为每个终端节点的最短路径提取一系列followranks
我认为我已经为这个查询提出了一个很好的第一个想法,但它似乎在多个点上分解.
我的查询是:
START strt=node(7)
MATCH p=strt-[*1..]-tgt
WHERE not(tgt=strt)
RETURN ID(tgt), extract(r in rels(p): r.followrank*length(strt-[*0..]-()-[r]->() )) as rank, extract(n in nodes(p): ID(n));
Run Code Online (Sandbox Code Playgroud)
哪个输出
==> +-----------------------------------------------------------------+
==> | ID(tgt) | rank | extract(n in nodes(p): ID(n)) |
==> +-----------------------------------------------------------------+
==> | 14 | [1.0] | [7,14] |
==> | 15 | [1.0,1.0] | [7,14,15] |
==> | 11 | [1.0,1.0,1.0] | [7,14,15,11] |
==> | 8 | [1.0,1.0,1.0,1.0,0.0] …Run Code Online (Sandbox Code Playgroud) 我已经查看过关于SO的其他相关问题,但这似乎有所不同.事实上,我的问题与此问题非常相似,只是我没有400状态问题.
设置:
部署到阶段:测试
1个资源,1个集成lambda的POST方法.
我已经使用了"启用CORS"选项 - 我尝试在资源和POST请求(以及之后部署API)上应用此选项.
在API GW中,我可以看到Access-Control-Allow-Origin在POST方法 - 方法响应区域下的200个响应标题中列出.
结果:从Chrome中的客户端代码调用端点,OPTIONS通过但由于缺少Access-Control-Allow-Origin标头POST失败.
在卷曲:OPTIONS调用
curl -X OPTIONS -H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: Content-Type" \
-H "Origin: http://example.com" --verbose <endpoint>
Run Code Online (Sandbox Code Playgroud)
回应是:
< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...
Run Code Online (Sandbox Code Playgroud)
但是使用POST:
curl -X POST -d '{}' -H "Content-Type: application/json" \
-H "Origin: http://example.com" --verbose <endpoint>
Run Code Online (Sandbox Code Playgroud)
它返回:
< HTTP/1.1 200 OK …Run Code Online (Sandbox Code Playgroud) 人们似乎一致认为,如果动作创建者需要状态信息(并且我们希望独立于状态形状),则调用该动作的组件应该向该动作提交所需的状态切片。请参阅此处Dan Abramov 的评论
但为什么我们不将选择器导入到操作中呢?
import { mySelector } from '../reducers';
const myAction = () => (dispatch, getState) => {
const requiredState = mySelector(getState());
etc...
};
Run Code Online (Sandbox Code Playgroud)
看起来这至少会节省一些组件往返的状态切片并解耦事物。
这样做有什么坏处呢?(也许除了 actions 无法导出ActionTypes。)
在python/flask/gunicorn/heroku堆栈上,我需要根据另一个环境变量的内容设置一个环境变量。
作为背景,我在 heroku 上运行一个 python/Flask 应用程序。我通过包含凭据和 url 的环境变量与插件进行通信。我用来与插件通信的库需要这些数据,但需要不同的格式。此外,它需要它作为环境变量。
到目前为止,我已经手动克隆并重新格式化了环境变量,但这只会带来灾难,因为附加组件提供商正在更改密码。
好的,所以我需要在库开始查找之前自动读取一个环境变量并设置另一个环境变量。
我尝试过的天真的方法是(文件app.py):
app = Flask(__name__, ...)
env_in = os.environ['ADDON_ENV_VAR']
os.environ['LIB_ENV_VAR'] = some_processing(env_in)
...
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000')
Run Code Online (Sandbox Code Playgroud)
python app.py在进行调试时效果很好,但在通过gunicorn app:app -b '0.0.0.0:5000'(作为Procfilefor foreman)运行以部署真正的网络服务器时会失败。在第二种情况下,环境变量似乎没有达到操作系统级别。我不确定 wsgi 是如何工作的,但一旦 Gunicorn 开始运行应用程序,环境可能会发生变化。
我该怎么做才能将环境变量设置在需要的地方?
我在如何将 route53 dns 记录与 serverless.yml 文件中的 S3 存储桶相关联上找到了这个。
我已经尝试将其调整到部署 Cloudfront 分发版的情况
DnsRecord:
Type: "AWS::Route53::RecordSet"
Properties:
AliasTarget:
DNSName: <cloudfrontdistribution id>
HostedZoneId: Z21DNDUVLTQW6Q
HostedZoneName: ${self:custom.appFQDN}.
Name:
Ref: WebAppCloudFrontDistribution
Type: 'CNAME'
Run Code Online (Sandbox Code Playgroud)
但我正在努力解决如何将分发 ID 作为参考而不是固定字符串获取。
我该怎么做?
aws-lambda ×2
cypher ×2
neo4j ×2
callback ×1
cors ×1
ecmascript-6 ×1
flask ×1
foreman ×1
gunicorn ×1
heroku ×1
javascript ×1
node.js ×1
react-redux ×1
reactjs ×1
redux ×1
serverless ×1