目前我已经设置了我的服务,如下所示。
version: '3'
services:
gateway:
container_name: gateway
image: node:lts-alpine
working_dir: /
volumes:
- ./package.json:/package.json
- ./tsconfig.json:/tsconfig.json
- ./services/gateway:/services/gateway
- ./packages:/packages
- ./node_modules:/node_modules
env_file: .env
command: yarn run ts-node-dev services/gateway --colors
ports:
- 3000:3000
Run Code Online (Sandbox Code Playgroud)
所以我指定了一个env_file。但现在我想传递多个 .env 文件。
不幸的是,以下情况是不可能的:
env_files:
- .env.secrets
- .env.development
Run Code Online (Sandbox Code Playgroud)
有没有办法将多个 .env 文件传递给 docker-compsoe 中的一项服务?
我想将ngx-socket-io添加到我的 Angular 应用程序中。我使用 Bazel 来运行我的 Angular 开发服务器。不幸的是ngx-socket-io,ts_devserver开箱即用似乎并不适用。我在浏览器控制台中收到此错误:
Uncaught TypeError: XMLHttpRequest is not a constructor
at ts_scripts.js?v=1587802098203:16776
at Object.23.../transport (ts_scripts.js?v=1587802098203:16780)
at o (ts_scripts.js?v=1587802098203:11783)
Run Code Online (Sandbox Code Playgroud)
它似乎是由xmlhttprequest-ssl引起的,它是engine.io-client 的一个依赖项,它是ngx-socket-io. 但是这个问题只发生在ts_devserver 上。在生产中运行 Angular 应用程序完全正常。
你可以自己轻松尝试:https : //github.com/flolu/bazel-socketio-issue
只需运行yarn install然后yarn dev(它会导致浏览器控制台 @ http://localhost:4200 中的错误)。并注意yarn prod@ http://localhost:8080工作正常!
目前,Windows 上似乎还有另一个问题。因此,如果您运行的是 Mac 或 Linux,则只能尝试示例存储库
借助Angular的新PWA功能,通过服务工作者使您的应用脱机工作非常简单。我的问题是如何利用NGRX来缓存状态,以便它可以脱机使用。
我还担心,客户端在浏览器中缓存状态时可能会修改状态。(例如,使用时ngrx-store-localstorage)
我有一个在基于微服务的架构(在 Kubernetes 上)上运行的应用程序。与应用程序外部的所有通信都通过API Gateway发生。
这只是意味着来自我前端的请求不会直接发送到服务,但它们必须通过网关。
现在我需要实现一个需要在前端和内部服务之间进行实时通信的功能。但是由于内部服务没有对外公开,我需要一种通过网关“路由”实时数据的方法。
我所有的服务都在 Node.js 上运行,这就是我想使用Socket.IO来实现实时通信的原因。
但是如何从草图中实现紫色双箭头?
所以通常前端客户端会连接到运行 Socket.IO 的服务器。但在我的情况下,这个服务器(实时功能服务器)不能从客户端访问(并且永远不应该),这意味着客户端必须连接到网关。因此网关需要实现某种机制来将所有传入消息路由到实时服务,反之亦然。
(1) 让第二个 HTTP 服务器侦听网关上的事件并将这些事件发送到实时服务器。在另一个方向,实时服务器将事件发送到网关,网关然后将它们发送到前端。我认为这种方法肯定会奏效,但是将所有内容发出两次似乎是多余的。它肯定会损害性能?
(2) 使用 Socket.IO 适配器“在节点之间传递事件”,这似乎是正确的方法,因为它用于“在进程或计算机之间传递消息”。但是由于缺乏文档/示例,我在入门时遇到了问题。我也没有使用 Redis(是否需要使用适配器?)
(3) 使用socket.io-emitter包,这似乎不是一个好的选择,因为上次提交是在 3 年前。
(4) 还有什么?
我有一个在 Kubernetes 集群中运行的 NodeJs 应用程序(我使用的是microk8s)。我还按照官方步骤在 Kubernetes 上设置 Elasticsearch。
但是我无法连接到 Elasticsearch 集群。我收到此错误:
ConnectionError: self signed certificate in certificate chain
Run Code Online (Sandbox Code Playgroud)
这是我的连接的代码片段:
ConnectionError: self signed certificate in certificate chain
Run Code Online (Sandbox Code Playgroud)
我在这里创建了这个问题的最小复制:https : //github.com/flolu/elasticsearch-k8s-connection。(设置说明在自述文件中)
基本上,在 Docker compose 中运行 Elasticsearch 时一切正常,但在 Kubernetes 中运行时无法连接。
造成这种情况的原因可能是我没有正确设置TLS证书,但我还没有找到任何相关信息。在创建 ES 客户端或在集群级别时,我是否在我的 NodeJs 应用程序中配置它?
我想通过 获取许多文档Schema.find(),但通过其 id排除一个特定文档。目前,我的查询如下所示:
Product
.find({
$or: [
{ 'tags': { $regex: criteria, $options: 'i' }, },
{ 'name': { $regex: criteria, $options: 'i' }, },
],
})
.limit(10)
.exec((err, similar) => {
//...
})
Run Code Online (Sandbox Code Playgroud)
我试图添加$not: { _id: someId }到查询中,但这给了我一个错误,这是$not无效的。
我有一个集合ProductViews。
产品视图
{
productId: '5b8c0f3204a10228b00a1745,
createdAt: '2018-09-07T17:18:40.759Z',
}
Run Code Online (Sandbox Code Playgroud)
我有一个查询来获取特定产品的每日浏览量。
询问
ProductView.aggregate([
{ $match: { productId } },
{ $project: { day: { $substr: ["$createdAt", 0, 10] } } },
{
$group: {
_id: "$day",
count: { $sum: 1 },
time: { $avg: "$createdAt" },
}
},
{ $sort: { _id: 1 } },
{
$project: {
date: '$_id',
views: '$count',
},
},
]).exec((err, result) => ...)
Run Code Online (Sandbox Code Playgroud)
当前结果
[
{ date: '2018-09-01', views: 1 },
{ date: '2018-09-02', views: …Run Code Online (Sandbox Code Playgroud) 我想知道我的两种方法中哪一种更合适,或者还有另一种方法吗?
UI发送HTTP请求到GATEWAYGATEWAY发送HTTP请求到?SERVICE A?SERVICE A返回SUCCESS或ERROREVENT STORE并发布到QUEUEPROJECTION DATABASE 已更新?SERVICES可能消费事件UI发送HTTP请求到GATEWAYGATEWAY 发布事件到 QUEUE?SERVICE A 消费事件EVENT STORE并发布到QUEUEPROJECTION DATABASE 已更新?SERVICES可能消费事件GATEWAY消费事件并将响应(SUCCESS或ERROR)发送到UI如果我误解了一些概念,我真的很抱歉,我对这种建筑风格比较陌生。
在此先感谢您的帮助!:)
我在我的 Node 项目中使用这个 npm 模块 ( module-alias)
https://www.npmjs.com/package/module-alias。
要使用这个包,你必须在package.json文件中设置路径别名。
但是,使用此软件包有一个缺点,即智能感知不再起作用。
我的问题是如何使用这些路径别名启用智能感知?
我有一个带有一些后端(Node.js)和前端(Angular)服务的 monorepo 。目前我的部署过程如下所示:
我的目标是在Bazel和Cloud Build的帮助下自动化所有这些步骤。但我真的很难开始使用 Bazel:
为了使它工作,我可能需要为我自己的包/服务添加一个WORKSPACE包含外部依赖项的文件和多个BUILD文件?我需要实际实施方面的帮助:
我整理了一个小样本 monorepo来展示我的用例
??? kubernetes
??? packages
? ??? enums
? ??? utils
??? services
??? gateway
Run Code Online (Sandbox Code Playgroud)
Gateway服务取决于enums和utilsDockerfile里面有一个 …node.js ×5
kubernetes ×3
angular ×2
bazel ×2
mongodb ×2
mongoose ×2
socket.io ×2
typescript ×2
aggregation ×1
cqrs ×1
docker ×1
gateway ×1
intellisense ×1
microk8s ×1
module-alias ×1
monorepo ×1
ngrx ×1
ngrx-store ×1
npm ×1
sockets ×1